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中执行相同的操作时,问题就开始了。我尝试了像 .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;

现在它就像一个魅力。

"公开"声明将我送上了正确的搜索方式。谢谢你的帮助,伙计!

相关内容

  • 没有找到相关文章

最新更新