首先,我不得不提到一個非常好的網站:http://www.codase.com/index.html
這是我在尋找嵌入函數時發現的,裡面有非常多的執行個體小代碼,實在是相見恨晚啊(呵呵)
前面說明了嵌入需要的配置(見http://blog.csdn.net/xiadasong007/archive/2009/09/02/4511841.aspx),這次主要是為了說明如何在C/C++中調用Python模組中的函數的基本方法。
前置說明:
1:PyObject * obj這個東西有點像SDK中控制代碼的感覺。
2:調用Python模組流程:首先要載入模組,載入完後就可以直接存取了(⊙o⊙)哦~!很簡單的~
好,來看代碼:
#include "python/python.h"
#include <iostream>
using namespace std;
int main(int argc,char** argv)
{
PyObject *pModule, *pFunc, *pValue;
Py_Initialize();
////////////////
pModule=PyImport_ImportModule("mat"); //mat是我自己用python寫的一個小模組(mat.py),裡面內容見後面附錄
pValue=PyObject_CallMethod(pModule,"add","ii",10,20); //通過上面得到的模組直接存取模組裡面的函數add(a,b)
//注意這裡的"ii"事實上相當於C中的"%d%d"的功能,請參考文檔
cout<<PyLong_AsLong(pValue)<<endl; //將得到的pValue值轉換為C中的long型
pFunc=PyObject_GetAttrString(pModule, "add"); //也可以使用該函數得到函數對象
pValue=PyObject_CallFunction(pFunc,"ii",1,2); //通過函數對象執行函數
cout<<PyLong_AsLong(pValue)<<endl;
////////////////
Py_Finalize();
return 0;
}
//附錄:mat.py
/*
def add(a,b):
return a+b
*/