2009-12-30 103 views
-1

我有以下蟒3文件:如何讓Python代碼與C++應用程序一起工作?

import base64 
import xxx 

str = xxx.GetString() 
str2 = base64.b64encode(str.encode()) 
str3 = str2.decode() 
print str3 

xxx是由一些C++代碼導出的模塊。此腳本不起作用,因爲在此腳本上調用Py_InitModule將返回NULL。奇怪的是,如果我創建在同一目錄

def GetString() : 
    return "test" 

存根xxx.py下python.exe運行原始腳本,它的工作原理和輸出以base64字符串。我的問題是爲什麼它不喜歡xxx.GetString的返回值?在C++代碼中,它返回一個字符串對象。我希望我已經很好地解釋了我的問題......這是一個奇怪的錯誤。

+3

除非您發佈C++代碼,否則無法回答此問題。錯誤在那裏。你的Python代碼沒有問題。 – dmazzoni 2009-12-30 08:40:12

+0

@George:請添加標籤名稱「C++」...另外,請發佈您的C++代碼... – wrapperm 2009-12-30 10:02:21

+0

修復了標籤。我會嘗試儘快添加代碼。 – 2009-12-30 18:08:45

回答

0

Py_InitModule()用於初始化用C語言編寫的擴展模塊,這不是您在這裏查找的內容。如果你想從C中導入一個模塊,在C API中有很多功能可用:http://docs.python.org/c-api/import.html

但是,如果你的目標是真正運行一個腳本而不是導入一個模塊,你也可以使用其中一個PyRun_XXX()函數描述如下:http://docs.python.org/c-api/veryhigh.html

+0

後者是我的意圖,但它仍然沒有運行...我想知道是否有任何與GetString返回一個ASCII字符串,而不是Unicode。 – 2009-12-30 17:53:03

+0

這裏是: return Py_BuildValue(「s」,「test」); – 2009-12-30 18:05:13

+0

這仍然沒有多大意義!請發佈使用Py_BuildValue()的結果的代碼。不要認爲給出關於你正在做什麼的部分和橢圓信息就足以讓我們正確地診斷你的問題! – 2009-12-30 21:28:44

0

呃...你必須調查爲什麼Py_InitModule返回NULL。使用該模塊發佈Python代碼將無濟於事。

+0

我不知道它爲什麼會返回NULL - 沒有任何內容被打印到控制檯。噢,等等。我明白你在說什麼。當我嘗試使用Py_InitModule加載上面的腳本時,返回NULL,而不是其他模塊。 – 2009-12-30 08:10:25

+0

我修正了這個問題。 – 2009-12-30 08:16:08

1

我知道每個人都這樣說......但: Boost有一個很棒的庫,用於向python展示類並從中獲取數據。如果你有問題,並尋找替代品是一個選項,我會強烈推薦C界面的boost python庫。我已經使用他們兩個,提升勝利手下降。

相關問題