C MFC多文件嵌入python

2021-07-07 01:29:40 字數 2117 閱讀 3656

概述:

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...