簡體   English   中英

MASM:從程序集訪問全局C變量

[英]MASM: Accessing to global C variable from assembly

我正在編寫一個程序來轉換圖像,並比較用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中執行相同操作時,問題就開始了。 我嘗試在extern ASMThreadID:dword塊中使用extern ASMThreadID:dword類的構造,但無法正常工作。

我收到的錯誤: error LNK2019: unresolved external symbol _ASMThreadID referenced in function _MyProc1

我感覺這是1-2行代碼的問題,但是我不知道應該使用哪條指令。

我通過ASM中的模塊定義文件鏈接項目,並將ASM.lib文件添加到主項目的Linker-> Input中。

你有什么建議嗎?

在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;

現在,它就像一種魅力。

“公開”聲明使我找到了正確的搜索方式。 謝謝你的幫助,隊友!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM