2012-06-14 151 views
7

我用我的C++代碼從Python中的Visual C++(由升壓包裹),具有帶來很大的麻煩不工作。升壓Python的Hello World示例在Python

好了,所以我使用的工具有:Visual Studio 2010中,BoostPro 1_47,Windows 7和Python 2.7版(32位)。

我有下面的代碼編譯很好地在Visual Studio 2010:

#define BOOST_PYTHON_STATIC_LIB 
#include <boost/python.hpp> 
using namespace boost::python; 

struct World 
{ 
    void set(std::string msg) { this->msg = msg; } 
    std::string greet() { return msg; } 
    std::string msg; 
}; 


BOOST_PYTHON_MODULE(hello) 
{ 
    class_<World>("World") 
      .def("greet", &World::greet) 
      .def("set", &World::set); 
} 

它的格式爲:Win32控制檯應用程序>>>空項目/ DLL。

在「項目屬性」:

VC++ DIRECTORIES: 
    I added: 
    >>> INCLUDE DIRECTORIES: C:\Program Files\boost\boost_1_47;C:\Python27\include  . 
    >>> LIBRARY DIRECTORIES: C:\Program Files\boost\boost_1_47\lib;C:\Python27\libs 

所有這一切都使得C++文件構建但我不能用Python訪問它。

這是Python的說什麼,當我嘗試使用模塊:

">>> import hello 
Traceback (most recent call last): 
    File "<pyshell#0>", line 1, in <module> 
    import hello 
ImportError: No module named hello 

所以我想我的問題是...我怎樣才能讓Python找到它???

當C++代碼編譯它創建一個DLL文件。我必須更改文件的位置嗎?如果是這樣,我應該把它放在哪裏?

您的幫助將不勝感激

回答

11

據我所知,你必須將DLL的擴展名更改爲.pyd或以其他方式Python將無法加載它。我認爲你可以設置一個構建選項來自動在VS中設置擴展名,但我不確定。

此外,還要確保創建擴展某處PYTHONPATH,道路,蟒蛇會尋找模塊加載。

+0

謝謝Constantinius! :D我終於得到這個工作,幾小時,幾小時後,試圖讓boost.python做它的事情。 – user1449530

+0

你能提供一個你已經做了成功的祕訣嗎? – Noam

+0

我還必須將包含Boost Python * .lib和* .dll文件的目錄添加到PATH –