我正在编写一个程序来转换图像并比较 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);
在包含这个 header 之后,我可以在主项目和 C DLL 中访问变量 ThreadID。
当我尝试在 ASM 中执行相同操作时,问题就出现了。我在 .code block 中尝试了像 extern ASMThreadID:dword
这样的结构,但它不起作用。
我得到的错误:error LNK2019: unresolved external symbol _ASMThreadID referenced in function _MyProc1
我感觉这是 1-2 行代码的问题,但我不知道应该使用哪条指令。
我通过 ASM 中的模块定义文件链接项目,并将 ASM.lib 文件添加到主项目的链接器->输入中。
你有什么建议吗?
最佳答案
在 asmcommunity.net 中旧帖子的帮助下,我设法让它工作:
- 在 .asm 文件中,.data 段之前:
EXTERNDEF C ASMThreadID:DWORD
- 在.data段中:
ASMThreadID dd 0
- 在 ASM DLL 的 .def 文件中:
库“项目名称”
导出
...
ASMThreadID
- 在主 C 程序头中(如全局声明):
extern __declspec(dllimport) unsigned int ASMThreadID;
现在它就像一个魅力。
“公共(public)”声明让我找到了正确的搜索方式。感谢您的帮助,伙计!
关于c - MASM:从程序集访问全局 C 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27028508/