我從這裏得到了一些代碼:https://github.com/Esri/file-geodatabase-api,我想阻止C++名稱變形,所以我可以在Python中使用ctypes來調用此DLL。在編譯時全局應用extern C
有沒有辦法在編譯器級別全局應用extern「C」? 有沒有辦法輕鬆地將它應用到代碼中的.h文件?
謝謝
(PS我不是一個C++開發者,所以藉口缺乏適當的術語)
我從這裏得到了一些代碼:https://github.com/Esri/file-geodatabase-api,我想阻止C++名稱變形,所以我可以在Python中使用ctypes來調用此DLL。在編譯時全局應用extern C
有沒有辦法在編譯器級別全局應用extern「C」? 有沒有辦法輕鬆地將它應用到代碼中的.h文件?
謝謝
(PS我不是一個C++開發者,所以藉口缺乏適當的術語)
看看代碼,沒有簡單的解決方案來解決您的問題。該軟件包沒有發佈的C綁定,只有C++。
你不能只是包裝的東西在全球extern "C"
創建一個C綁定,類型和API都嚴重C++面向和DLL已反正錯位C++符號。
您沒有庫的源代碼,但可以創建一個單獨的庫,其中包含C可調用函數,該函數又調用原始DLL的C++ API。至少可以說,這不是一件小事!
如果你的目標是獲得一個Python爲ESRI文件地理數據庫API綁定,可以看看這些頁面:
http://libjoe.blogspot.fr/2014/02/python-wrapper-for-esri-file.html
https://code.google.com/archive/p/file-geodatabase-api-python-wrapper/
https://gis.stackexchange.com/questions/64864/gdal-python-bindings-and-file-geodatabase-api
謝謝你的建議,我想我會嘗試這3種解決方案。我試圖遵循code.google.com解決方案(swig解決方案),但我無法獲得SWIG使用windows創建一個可用的活頁夾任何想法? –
執行以下操作在C++文件,這樣就不必改變headerfile.h
:
extern "C" {
#include <headerfile.h>
}
這是一個普遍的想法,但不適用於OP的問題。下載軟件包並瀏覽頭文件...準備好。 – chqrlie
啊!我剛剛做到了。噢親愛的。因此,除非有人知道某種工具,否則整個新的適應層。我知道沒有:( – systemcpro
我將創建與庫接口功能的新的頭文件,因爲不同的操作系統需要不同的功能屬性導出:
extern "C" {
int __attribute__ (dllexport) ReturnSameValue(int avalue) // Linux
{
return avalue
}
int __declspec(dllexport) IncreseInteger(int avalue) // Windows dll
{
return avalue+1;
}
}
不能老是EXTERN 「C」'even * be *應用?一個重載函數將打破任何嘗試。 – StoryTeller
請勿使用ctypes。使用C++感知包裝器(CLIF,SIP,SWIG等) – Mike