2010-01-07 33 views
3

我沒有使用從Internet上找到的代碼片斷進行這種鏈接,並且它工作正常。現在我想對這個主題有更多的理解,即如果我的C++代碼將被非C++代碼導出/鏈接,我應該注意什麼。有人可以指點我有用的任何資源嗎?謝謝。與非C++代碼的鏈接

回答

5

本地代碼互操作性的關鍵概念是name manglingcalling conventions

但是,真正的一點是,如果你希望你的代碼可以從其他語言中調用(你沒有在你的問題中指定任何代碼),你必須採用最低公分母方法。通常這意味着避免對象和功能上的思考,將代碼封裝在DLL中並使用C風格的接口。您可能需要使用STDCALL調用約定來定義DLL的api函數。另外,如果你在界面中使用結構,你不得不擔心結構打包。例如,爲了使用打包記錄與Delphi進行適當的互操作,我認爲您必須在C編譯器中將結構成員對齊設置爲1個字節。

5

使用extern "C"功能...參見here。這允許在「C」級別進行接口,這可能更「跨平臺/語言」。

+0

IT不是編譯器的預處理器指令。技術上extern是'存儲類說明符',而「C」是存儲類的'linkage_specification'。 – 2010-01-07 11:51:07

+0

@Martin:哦,是的,謝謝......小小的錯誤:-) – jldupont 2010-01-07 12:05:10

0

而且....在與鮑勃·摩爾的答案一起...您可以防止名稱使用的#ifdef

 
#ifdef __cplusplus 
extern "C" { 
#endif 

/* function prototypes and global variable declarations */ 

#ifdef __cplusplus 
} 
#endif 

那重整__cplusplus指令,發現在<stddef.h>被定義爲標準,據我所知...

希望這會有所幫助, 最好的問候, 湯姆。

+0

值得注意的是,這個技巧確實只用於標題,而不是用於.cpp文件。 – 2010-01-09 00:03:00