微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法将 MASM 函数导入 C

如何解决无法将 MASM 函数导入 C

使用 VS2019(32 位项目)

我尝试了什么:

  • 在“构建自定义”中启用“.masm”
  • 将“.asm”文件的类型设置为“Microsoft Macro Assembler”
  • 将“保留标识符大小写”设置为“/Cp”-“保留标识符大小写”
  • 在我的函数之前、之后和顶部放置一个`PUBLIC 我的函数名称
  • 将“将所有符号标记为公开”设置为“是”
  • 在“.asm”文件中的函数名称以及“.c”文件中的“extern”定义中添加/删除下划线。
  • 将定义放在“.h”文件中。

似乎没有任何效果,我不断收到 LNK2001 错误

这是我的工作方式(删除了实际的汇编代码,因为它无论如何都会发生):

程序集文件

.model flat,stdcall
.stack 4096
.code

MyFunction proc
push ebp
mov ebp,esp
mov eax,[ebp+08h]
;...
pop ebp
ret 04h
MyFunction endp

end

C 文件

extern void __stdcall MyFunction(unsigned int x);

解决方法

我已经解决了我的问题。

在我的情况下,我没有装饰指令的事实似乎不是问题,问题是 MASM 不知道我的函数有多少参数,所以装饰符号是 _MyFunctionName@0

我首先为我的函数添加了一个带有参数的原型: MyFunction proc stdcall x:DWORD

但问题是 MASM 会为我的函数生成自己的序言和尾声,这会搞砸堆栈,所以我还在文件顶部添加了以下几行:

option prologue:none
option epilogue:none

现在可以完美运行了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。