簡體   English   中英

將MASM中制作的庫調用到C或C ++

[英]Calling a library made in MASM to C or C++

我一直試圖在C中調用由masm制作的庫。 我設法從程序集MASM制作一個.lib文件。 但我不知道如何將其稱為C語言庫。 這是.lib文件https://www.dropbox.com/s/d9d8cjbxmo51yqg/main.lib

需要幫助。 謝謝

基本思想很簡單:

  1. 使用C調用約定編寫(外部可見的)匯編語言函數。
  2. 為每個函數編寫一個與C兼容的原型/聲明。
  3. 根據需要調用函數。

一般想法如下所示(警告:未經測試的代碼):

; masm file
.model flat, c

.code

plus1 proc input:dword
    mov eax, input
    add eax, 1
    ret
plus1 endp
     end

C / C ++標頭:

#ifdef __cplusplus
extern "C" {
#endif

int plus1(int);

#ifdef __cplusplus
}
#endif

調用代碼:

#include "header.h"

int main() { 
   int x = plus1(14);
}

天啊。 巨大的陷阱。 在Visual Studio中的32位masm .asm文件中,“。model flat,c”是至關重要的。 特別是“ c”。 64位masm匯編由於某種原因不需要它,因此可以正常工作。 但是,如果您嘗試從程序集中的C ++或C代碼中調用extern“ C”定義的函數,則32位將不會鏈接,並且它將抱怨未解析的符號,無論在您的asm中定義了EXTERN符號:PROC。

與64位相比,這是一種奇怪的傳統32位。

除此之外,對於您的問題,我想您只想在asm中聲明您的asm函數PUBLIC,只需聲明“ PUBLIC函數名”,然后就不需要它們的標頭或任何內容,只需使用“ extern”或在調用的C / C ++代碼中使用extern“ C”,它將在匯編對象和鏈接中找到它們。

暫無
暫無

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

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