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

我正在编写一个程序来转换图像并比较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块中尝试过像extern ASMThreadID:dword这样的构造,但它不起作用。

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

我觉得这是1-2行代码的问题,但我无法弄清楚应该使用哪条指令。

我通过ASM中的模块定义文件链接项目,并将ASM.lib文件添加到主项目的链接器 – >输入中。

你有什么建议吗?

在asmcommunity.net的旧post的帮助下,我设法让它工作:

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

EXTERNDEF C ASMThreadID:DWORD

  • 在.data段:

ASMThreadID dd 0

  • 在ASM DLL的.def文件中:

LIBRARY "nameOfProject" EXPORTS ... ASMThreadID

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

extern __declspec(dllimport) unsigned int ASMThreadID;

现在它就像一个魅力。

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