我沒有使用從Internet上找到的代碼片斷進行這種鏈接,並且它工作正常。現在我想對這個主題有更多的理解,即如果我的C++代碼將被非C++代碼導出/鏈接,我應該注意什麼。有人可以指點我有用的任何資源嗎?謝謝。與非C++代碼的鏈接
3
A
回答
5
本地代碼互操作性的關鍵概念是name mangling和calling conventions。
但是,真正的一點是,如果你希望你的代碼可以從其他語言中調用(你沒有在你的問題中指定任何代碼),你必須採用最低公分母方法。通常這意味着避免對象和功能上的思考,將代碼封裝在DLL中並使用C風格的接口。您可能需要使用STDCALL調用約定來定義DLL的api函數。另外,如果你在界面中使用結構,你不得不擔心結構打包。例如,爲了使用打包記錄與Delphi進行適當的互操作,我認爲您必須在C編譯器中將結構成員對齊設置爲1個字節。
5
使用extern "C"
功能...參見here。這允許在「C」級別進行接口,這可能更「跨平臺/語言」。
0
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
相關問題
- 1. 如何將C代碼與BoringSSL鏈接?
- 2. 鏈接C++源代碼
- 3. 與ST鏈接代碼
- 4. 是否可以鏈接C代碼與llvm位代碼?
- 5. 將C代碼與Cuda代碼鏈接起來
- 6. 爲什麼我可以跳過「設備代碼鏈接」與非nvcc鏈接器?
- 7. 將c代碼鏈接到C++代碼時,g ++鏈接順序依賴關係
- 8. XOR鏈接列表的C代碼
- 9. 如何鏈接C++代碼中的STL?
- 10. 鏈接C++代碼的問題
- 11. C++中的鏈接列表代碼
- 12. 半非託管代碼與c#
- 13. 與iPhone應用程序的C代碼鏈接錯誤
- 14. C++錯誤代碼將不會鏈接
- 15. 鏈接d庫,以C++代碼
- 16. 從c代碼鏈接到libx264庫Ubuntu
- 17. Visual Studio:鏈接圖與代碼
- 18. 鏈接無法與onClick跟蹤代碼
- 19. 鏈接視圖按鈕與代碼
- 20. 如何編寫Makefile以將C代碼與Arm彙編代碼鏈接?
- 21. Ruby代碼鏈接
- 22. C/C++鏈接問題與一個非常簡單的設置
- 23. 問題鏈接C++代碼使用提升與mingw
- 24. 如何用「guile-1.8.8」將C++代碼與「libguile」鏈接起來?
- 25. 將C++代碼鏈接到Borland C++ 3.1編譯器中的C
- 26. 託管代碼與非託管代碼
- 27. 將鏈接鏈接至本JavaScript代碼
- 28. 在非託管C++代碼
- 29. 問題與鏈接C/C++
- 30. 覆蓋非iPad鏈接上顯示的鏈接電話號碼?
IT不是編譯器的預處理器指令。技術上extern是'存儲類說明符',而「C」是存儲類的'linkage_specification'。 – 2010-01-07 11:51:07
@Martin:哦,是的,謝謝......小小的錯誤:-) – jldupont 2010-01-07 12:05:10