[英]Calling a library made in MASM to C or C++
我一直試圖在C中調用由masm制作的庫。 我設法從程序集MASM制作一個.lib文件。 但我不知道如何將其稱為C語言庫。 這是.lib文件https://www.dropbox.com/s/d9d8cjbxmo51yqg/main.lib
需要幫助。 謝謝
基本思想很簡單:
一般想法如下所示(警告:未經測試的代碼):
; 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.