易截截图软件、单文件、免安装、纯绿色、仅160KB

Python笔记(二)——python调用C/C++模块

前一篇讲了简单的C/C++调用Python脚本模块(.py)。既然是用于诸多游戏程序的脚本语言,那肯定是缺不了互调(礼尚往来)。因此,本篇讲一个简单的python调用C/C++写的DLL模块,对Python进行功能扩展。这里写一个简单的例子,主要就为了了解下这么用Python来调用C/C++写的DLL库。好了,切入正题:
 首先,我是用VS2003建的一个DLL工程,将DLL工程属性里面的输出文件的(.dll)改为(.pyd)。当然也可以将生成后的DLL扩展名改为.pyd。呵呵!免得大家以为它很神秘(VC还能生成.pyd库?这种疑问!)好,直接贴代码:
#include <Python.h>
int cmd( const char *arg )
{
     int n = system( arg );
     return n;
}
static PyObject * wrap_cmd_fun( PyObject *self, PyObject *args )
{
     const char * command;
     if ( !PyArg_ParseTuple( args, "s", &command ) )
          return NULL;
     int n = cmd( command );
     return Py_BuildValue( "i", n );
}
static PyMethodDef MyCppMethods[] =
{
     { "MyCppFunc", wrap_cmd_fun, METH_VARARGS, "Execute a shell command." },
     { NULL, NULL, 0, NULL }
};
PyMODINIT_FUNC initMyFirstPythonModule( void )
{
     PyObject *m = Py_InitModule( "MyFirstPythonModule", MyCppMethods );
     if (m == NULL)
         return;
}
这个实例很简单,首先是Py_InitModule用于初始化在Python脚本中要import的模块,这里的模块名是:MyFirstPythonModule。我们在Python中将使用import MyFirstPythonModule 来载入这个模块。这里我们将MyCppMethods作为模块要调用的方法,它是一个PyMethodDef结构。我们可以看到这个结构的数组定义,{ "MyCppFunc", wrap_cmd_fun, METH_VARARGS, "Execute a shell command." }, 红色的就是我们在脚本里面要调用的函数名字,它被映射为wrap_cmd_fun,当在Python脚本中调用MyCppFunc时将会调用wrap_cmd_fun函数。第三个METH_VARARGS成员表示调用方式,可以用或运算连接几个调用方式。第四个成员是一个方法


相关文档:

Python 3.x (1):入门

 
1 你好
#打开新窗口,输入:
#! /usr/bin/python
# -*- coding: utf8 -*- 
s1=input("Input your name:")
print("你好,%s" % s1)
'''
知识点:
    * input("某字符串")函数:显示"某字符串",并等待用户输入.
    ......

c里面的冒号——位域定义器

 typedef struct _RTP_header {
        /* byte 0 */
        #if (BYTE_ORDER == LITTLE_ENDIAN)
            unsigned char csrc_len:4;        /* expect 0 */
&nb ......

用C/C++写CGI程序

 用C/C++写CGI程序
    使用CGIC库的简要:
    库的函数说明: http://www.boutell.com/cgic/#cgiFormStringNoNewlines
    1. 打印CGI标准输出头部:
    cgiHeaderContentType("text/plain");
    或者:
  ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号