返回PY類型字符串 PyString_FromString 加載模塊 PyImport_Import ************************* C++向Python傳參數(shù)是以元組(tuple)的方式傳過去的 pArgs?=?PyTuple_New(1); PyTuple_SetItem(pArgs,?0,?PyInt_FromLong(a)); 或者 pArgs=Py_BuildValue("(i)",?a); ************************************************ 調(diào)用PY函數(shù) PyObject_CallObject 獲取PY屬性或函數(shù) PyObject_GetAttrString 常用的Python/C?API介紹 下面是例子中用到的幾個Python/C?API的簡要介紹及示例代碼。注意,這并不是這些函數(shù)的詳細介紹,而僅僅是我們所用到的功能簡介,更詳細內(nèi)容請參考文檔[1]、[2]、[3]、[4]。 打開Microsoft?Visual?Studio?.NET?2003,新建一個控制臺程序,#include,并在main函數(shù)里加入示例代碼。 //先定義一些變量 char?*cstr; PyObject?*pstr,?*pmod,?*pdict; PyObject?*pfunc,?*pargs; 1.?void?Py_Initialize(?)? 初始化Python解釋器,在C++程序中使用其它Python/C?API之前,必須調(diào)用此函數(shù),如果調(diào)用失敗,將產(chǎn)生一個致命的錯誤。例: Py_Initialize(); 2.?int?PyRun_SimpleString(?const?char?*command) 執(zhí)行一段Python代碼,就好象是在__main__?函數(shù)里面執(zhí)行一樣。例: PyRun_SimpleString("from?time?import?time,ctimen" "print?''Today?is'',ctime(time())n"); 3.?PyObject*?PyImport_ImportModule(?char?*name) 導入一個Python模塊,參數(shù)name可以是*.py文件的文件名。相當于Python內(nèi)建函數(shù)__import__()。例: pmod?=?PyImport_ImportModule("mymod");?//mymod.py 4.?PyObject*?PyModule_GetDict(?PyObject?*module)? 相當于Python模塊對象的__dict__?屬性,得到模塊名稱空間下的字典對象。例: pdict?=?PyModule_GetDict(pmod); 5.?PyObject*?PyRun_String(?const?char?*str,?int?start,?PyObject?*globals,?PyObject?*locals) 執(zhí)行一段Python代碼。 pstr?=?PyRun_String("message",?Py_eval_input,?pdict,?pdict); 6.?int?PyArg_Parse(?PyObject?*args,?char?*format,?...) 解構(gòu)Python數(shù)據(jù)為C的類型,這樣C程序中才可以使用Python里的數(shù)據(jù)。例: /*?convert?to?C?and?print?it*/ PyArg_Parse(pstr,?"s",?&cstr); printf("%sn",?cstr); 7.?PyObject*?PyObject_GetAttrString(?PyObject?*o,?char?*attr_name) 返回模塊對象o中的attr_name?屬性或函數(shù),相當于Python中表達式語句:o.attr_name。例: /*?to?call?mymod.transform(mymod.message)?*/ pfunc?=?PyObject_GetAttrString(pmod,?"transform"); 8.?PyObject*?Py_BuildValue(?char?*format,?...) 構(gòu)建一個參數(shù)列表,把C類型轉(zhuǎn)換為Python對象,使Python可以使用C類型數(shù)據(jù),例: cstr="this?is?hjs''s?test,?to?uppercase"; pargs?=?Py_BuildValue("(s)",?cstr); 9.?PyEval_CallObject(PyObject*?pfunc,?PyObject*?pargs) 此函數(shù)有兩個參數(shù),都指向Python對象指針,pfunc是要調(diào)用的Python?函數(shù),通常可用PyObject_GetAttrString()獲得;pargs是函數(shù)的參數(shù)列表,通??捎肞y_BuildValue()構(gòu)建。例: pstr?=?PyEval_CallObject(pfunc,?pargs); PyArg_Parse(pstr,?"s",?&cstr); printf("%sn",?cstr); 10.?void?Py_Finalize(?)? 關(guān)閉Python解釋器,釋放解釋器所占用的資源。例: Py_Finalize();