概述:
c++呼叫python解析器,呼叫流程及方法在此就不多述了,網上相關資料很多,官方的api文件可以reference
程式結構:
1,設計中間橋接dll,c++中設定列印函式位址至dll共享段,python中呼叫此dll的列印函式列印至應用程式主介面(注:dll中共享函式需保證在同一程序中呼叫)。
//----------------軟體介面呼叫設定傳送命令函式------------------
void setfuncsendcommand(char* (*func)(char*, int))
//---------------軟體介面呼叫設定列印函式-----------------------
void setfuncprint(void (*func)(char *))
//-----------------------匯出給python呼叫傳送命令-----------------------
char* pysendcommand(char *p, int len)
//-----------------------匯出給python print呼叫列印-----------------------
void pyprint(char *p)
2,設計中間橋接python指令碼,執行初始化操作重定向輸出流及獲取dll中的列印方法,
def dllinit(strpath):
global dll
dll = ctypes.cdll.loadlibrary(strpath)
# 重定向輸出流
sys.stdout = myprint()
sys.stderr = myprinterr()
def sendcommand(_str_in):
global dll
dllfunsendcommand = dll.pysendcommand
dllfunsendcommand.argtypes = [ctypes.c_char_p, ctypes.c_int]
dllfunsendcommand.restypes = ctypes.c_char_p
pchar = dllfunsendcommand(_str_in, len(_str_in))
szbuffer = ctypes.c_char_p(pchar)
strrecv = str(szbuffer)[9:-1]
return strrecv[1:-1]
def dllprint(_str_in):
global dll
dllfunprint = dll.pyprint
dllfunprint.argtypes = [ctypes.c_char_p]
# if the unicode, convert to utf-8
if type(_str_in).__name__ == 'unicode':
_str_in = _str_in.encode('utf-8')
dllfunprint(_str_in)
return
3,mfc**中實現列印方法,並呼叫dll中的setfuncsendcommand(char* (*func)(char*, int))將介面的列印方法傳遞給dll
void pyframeprint(char* ch)
bool cmainframe::getdllfunction()
fundllsetfuncprint(pyframeprint);
return true;
}
4,mfc軟體執行python指令碼,至此,整個迴路呼叫完成。
pyrun_******string(strpyfile.c_str());
5,執行介面如下:
多文件問題
1.是多文件工程。2.在cmainfram.h新增cdialogbar m wndmydialogbar 3.在cmainfram.cpp oncreat中 if m wndmydialogbar.create this,idd dialog1,這個是對話方塊的id,對話方塊沒有建立類,應該不用吧?...
嵌入python 嵌入python
我試圖從c 呼叫python函式,我遵循了here中的乙個示例 我也有正確的include file directries library directries,並鏈結了python32.lib im使用python32 但是錯誤是python c api,如pystring fromstring ...
MFC多文件框架
m viewlist.addtail pview assert pview m pdocument null must be un attached pview m pdocument this 獲得cmainframe 獲得 cchildframe 獲得cdocument 獲得cview afxg...