我正在编写一个程序来转换图像并比较在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中执行相同的操作时,问题就开始了。我尝试了像 .code 块中的 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 文件中:
LIBRARY "nameOfProject"
EXPORTS
...
ASMThreadID
- 在主 C 程序头(如全局声明)中:
extern __declspec(dllimport) unsigned int ASMThreadID;
现在它就像一个魅力。
"公开"声明将我送上了正确的搜索方式。谢谢你的帮助,伙计!