问题描述
我正在写一个程序转换图像和比较处理数据的速度,在C和汇编。我有3个项目:
I'm writing a program to convert image and compare the speed of processing data in C and assembly. I have 3 projects:
- 在C主程序项目
- 在C DLL转换图像
- 在ASM DLL转换图像
在C DLL的头,我只是写道:
In C DLL header, I simply wrote:
#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。
and after including this header, I can access variable ThreadID both in main project and C DLL.
问题时,我尝试做相同的ASM启动。我试着像的extern ASMThreadID结构:DWORD
在code座,但它不会工作。
The problem starts when I try to do the same in ASM. I tried constructions like extern ASMThreadID:dword
in .code block, but it won't work.
我得到的错误:错误LNK2019:无法解析的外部符号功能_MyProc1 _ASMThreadID引用
我有一种感觉,它是1-2线code的问题,但我想不出我应该使用的指令。
I have a feeling that it's a matter of 1-2 lines of code, but I can't figure out which instruction should I use.
我通过链接模块定义文件的项目,ASM和添加ASM.lib文件到连接器 - 主体工程>输入。
I link the projects by module definition file in ASM and adding ASM.lib file into the Linker->Input of main project.
你有什么建议吗?
推荐答案
从旧帖子在asmcommunity.net小的帮助,我设法得到它的工作:
With small help from old posts in asmcommunity.net, I managed to get it working:
- 在.ASM文件,。数据段前:
EXTERNDEFÇASMThreadID:DWORD
- 在。数据段:
ASMThreadID DD 0
- 在ASM DLL的DEF文件:
库nameOfProject
EXPORTS
...
ASMThreadID
- 在主要的C程序头(如全局声明):
的extern __declspec(dllimport的)无符号整型ASMThreadID;
现在它的工作原理就像一个魅力。
Now it works like a charm.
在'公共'声明送我去搜索的正确方法。感谢您的帮助,伙计!
The 'public' declaration sent me to the right way of searching. Thanks for your help, mate!
这篇关于MASM:访问从汇编全局C变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!