MASM:从程序集中访问全局 C 变量

2023-11-23

我正在编写一个程序来转换图像并比较 C 语言和汇编语言处理数据的速度。我有3个项目:

  • C语言的主要项目
  • C 中的 DLL 来转换图像
  • ASM中的DLL用于转换图像

在C DLL头文件中,我简单地写了:

#ifdef PROJEKTC_EXPORTS
    #define PROJEKTC_API __declspec(dllexport)
#else
    #define PROJEKTC_API __declspec(dllimport)
#endif

...

extern PROJEKTC_API unsigned int ThreadID;      

PROJEKTC_API void __cdecl funkcjaC(void* Args); 

包含此标头后,我可以在主项目和 C DLL 中访问变量 ThreadID。

当我尝试在 ASM 中执行相同操作时,问题就出现了。我尝试过像这样的结构extern ASMThreadID:dword在 .code 块中,但它不起作用。

我得到的错误:error LNK2019: unresolved external symbol _ASMThreadID referenced in function _MyProc1

我感觉这只是 1-2 行代码的问题,但我不知道应该使用哪条指令。

我通过 ASM 中的模块定义文件链接项目,并将 ASM.lib 文件添加到主项目的 Linker->Input 中。

你有什么建议吗?


在 asmcommunity.net 旧帖子的帮助下,我成功地使其正常工作:

  • 在 .asm 文件中,.data 段之前:

EXTERNDEF C ASMThreadID:DWORD

  • 在.data段中:

ASMThreadID dd 0

  • 在ASM DLL的.def文件中:

LIBRARY "nameOfProject" EXPORTS ... ASMThreadID

  • 在主 C 程序头中(如全局声明):

extern __declspec(dllimport) unsigned int ASMThreadID;

现在它就像一个魅力。

“公开”声明让我找到了正确的搜索方式。谢谢你的帮助,伙计!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MASM:从程序集中访问全局 C 变量 的相关文章