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

标签 c assembly dll global-variables masm

我正在编写一个程序来转换图像并比较 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/

相关文章:

c - mc56f8367头文件的要求

c - GTK 应用程序使用 gcc 编译,但不在代码块中编译

c++ - gcc: undefined reference

c++ - 与C++和汇编相关,什么是ebp+8?

dll - 如何拦截 VB6 ActiveX DLL 中的 DLL 加载/卸载事件?

即使库链接,DLL 也会被忽略

ruby-on-rails - "msvcrt-ruby18.dll was not found"与 ruby

c - C 中分母的增量

c - 未知 IA32 汇编语言指令

c - 变质示例代码