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;
现在它就像一个魅力。
“公开”声明让我找到了正确的搜索方式。 谢谢你的帮助,伙伴们!