前言:
(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* argv[])
{
char *psz = NULL;
//初始化python.Python Init
Py_Initialize();
if(!Py_IsInitialized())
{
printf("can't init python.");
return 0;
}
//PyRun_SimpleString("import sys");
//PyRun_SimpleString("sys.path.append('./ ')");
PyObject *pName,*pModule,*pDict,*pFunc,*pArgs, *pRes;
//这个就是你要嵌入的python文件名.
pName = PyString_FromString("pytest");
//得到该python文件的模块.
pModule = PyImport_Import(pName);
if(!pModule)
{
printf("can't find pytest.py");
return 0;
}
//得到python模块中的函数表集合.
pDict = PyModule_GetDict(pModule);
if(!pDict)
{
return 0;
}
//得到特定的函数项.
pFunc = PyDict_GetItemString(pDict, "add");
if(!pFunc || !PyCallable_Check(pFunc))
{
printf("can 't find function [add]");
return 0;
}
//添参数.
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))
{
printf("can't find function [str_find]");
return 0;
}
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程序了!