VC內嵌Python指令碼

2021-09-30 06:01:11 字數 2499 閱讀 1404

前言:

(tcl 在國內似乎很少有人用,據說因為用的人少,所以中文方面的資料非常少的

python 好像比較好學的,而且使用者群比tcl perl 要多,中文資料也蠻多的了,我也在學python)

1. 安裝python2.6.1到c:/python26

2. 用vc2008(vc6.0不行)新建乙個vc專案, 在project setting中,把c:/python/include加入「其他標頭檔案」那一項,

把c:/python/libs加入link的附加目錄裡。

乙個簡單的控制台工程的源**:

#include "stdafx.h"

#include "python.h"

int main(int argc, char* ar**)

//這個就是你要嵌入的python檔名.

pname = pystring_fromstring("pytest");  

//得到該python檔案的模組.

pmodule = pyimport_import(pname);

if(!pmodule)

//得到python模組中的函式表集合.

pdict = pymodule_getdict(pmodule);     

if(!pdict)

//得到特定的函式項.

pfunc = pydict_getitemstring(pdict, "add");

if(!pfunc || !pycallable_check(pfunc))

//添引數.

pargs   =   pytuple_new(2);

pytuple_setitem(pargs,0,py_buildvalue("l", 100));

pytuple_setitem(pargs,1,py_buildvalue("l", 200));

//呼叫python程式去執行函式

pyobject_callobject(pfunc ,pargs);   

//另外乙個函式例子,演示了如何向python傳遞引數,和如何傳回c++

pfunc   =   pydict_getitemstring(pdict, "str_find");

if(!pfunc   ||   !pycallable_check(pfunc))

pargs   =   pytuple_new(2);

pytuple_setitem(pargs,0,py_buildvalue( "s", "abcdef"));

pytuple_setitem(pargs,1,py_buildvalue( "s", "de"));

long   ret_val = pyint_aslong(pyobject_callobject(pfunc, pargs));

printf( "%d/n", ret_val);

//釋放該檔案模組.

py_decref(pmodule);

//清除. uninti python

py_finalize();      

printf("hello world!/n");

return 0;

}//python原始檔:python.py

def   add(a,b):

print   "in   python   function   add "

print   a+b

return

def   str_find(str1, str2):

print   "str1:", str1

print   "str2:", str2

return   str1.rfind(str2)

//ok, 程式執行ok,接下來就要把該工程打包,這比較麻煩,我也弄的好久才ok.

1)首先利用py2exe將pytest.py編譯為可執行程式:

寫個setup.py檔案:

from distutils.core import setup

import py2exe

setup(console=['d:/program vc6/testpython/release/pytest.py'])

輸入c:/python26>python "d:/program vc6/testpython/release/setup.py" py2exe

該目的是利用其中生成的python26.dll(這個所有對於所有的python指令碼都一樣吧)和library.zip(不同指令碼生成不同的庫檔案)。

2)發布vc編譯生成的程式時,需要以下檔案:

可執行程式:pytest.exe;

dll:python26.dll;

python指令碼:pytest.py;

庫檔案:python26.zip(將library.zip重新命名為python26.zip,程式預設呼叫這個名字的庫檔案)。

3)放到乙個無python環境的機器中,測試成功。

so now,可以發布呼叫python的vc程式了!

在VC 2005中內嵌彙編

在vc 2005中內嵌彙編 一na和nb進行數值交換 intna 10 intnb 11 asm 二 加法運算 intassembleradd int na,int nb return nb 三 減法運算 intassemblersub int na,int nb return na 四 採用彙編呼...

如何使用C 內嵌指令碼(一)

這篇文章介紹如何使用 c 內嵌指令碼,筆者將一步一步演示整個內嵌指令碼的開發過程,通過這篇文章大家可以了解到指令碼和系統是如何相互協作配合完成系統開發的。由於本人水平有限,如果有什麼不對的地方大家多多指點,現在進入正題。指令碼功能 n完成乙個加法計算 n把上一步計算的結果再交給系統處理 n指令碼返回...

VC資源指令碼

資源指令碼,它是乙個簡單的文字檔案,可以手工編輯,也可以讓visual c 自動編輯,或者你用其它的自動編輯器編輯。無論如何,資源指令碼檔案要有乙個.rc的副檔名。大多數的指令碼檔案都從定義資源行開始,最簡單的資源行通常要用到資源型別,就像這樣 identifier resource type fi...