2014-03-13 90 views
0

我有用C++編寫的第三方DLL(無頭文件),我能夠從開發人員那裏獲得函數原型信息,但它是專有的,他不會提供源代碼。SWIG C++預編譯DLL

我已經通過了SWIG教程,但找不到指定如何使用SWIG訪問任何只有DLL文件的函數的地方。教程中的所有內容都顯示我需要擁有標題,以便SWIG知道函數原型的樣子。

SWIG是否是在這種情況下使用的正確途徑?我想在Python中加載這個DLL,所以我可以使用一個函數。從我所有的研究中,它看起來像Python的ctypes不適用於C++ DLL文件,我正試圖找到遵循這一步的最佳路線。 Boost.python似乎需要更改底層的C++代碼才能使其與Python協同工作。

總之,當我知道函數原型但沒有頭文件或源代碼時,有沒有辦法使用SWIG?

+0

事實證明,我們能夠得到的頭文件,所以我應該能夠得到它與SWIG合作。 – chrcoe

回答

2

即使沒有頭文件,如果您有原型,您可以自己創建一個頭文件,或者直接在SWIG接口文件中輸入原型。

例如,如果原型是:

int sum(const std::vector<int>& vint); 

的SWIG接口將是:

%module example 
%{ 
    #include <vector> 
%} 
%include <std_vector.i>    # SWIG support 
%template() std::vector<int>;   # Generate code to support template instance. 

int sum(const std::vector<int>& vint); # Generate wrapper for function. 
+0

這就是我最終做的。我說過的每個人,在你說沒有頭文件的情況下是不可能的,我也不知道更好。我給了它一個鏡頭,並最終得到這個工作,謝謝! – chrcoe

0

要使用的庫(靜態或動態),你需要頭和庫文件。一,.LIB ...

其對C++真的,我認爲它同樣適用於Python

+0

我想我得出的結論是,SWIG或boost可能會做到這一點,因爲這裏有關於使用C庫通過Python的ctypes模塊函數'cdll.LoadLibrary('file.dll'''[ python ctypes](http://docs.python.org/2/library/ctypes.html)也類似於這個問題:http://stackoverflow.com/questions/252417/how-can-i-use-a- dll-from-python – chrcoe

0

痛飲不能沒有頭文件就可以使用。你唯一的選擇是像ctypes一樣的庫。如果你發現ctypes沒有爲你做,你找不到替代方案,然後發佈一個問題,爲什麼ctypes不適用於你的情況。