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成员表示调用方式,可以用或运算连接几个调用方式。第四个成员是一个方法
相关文档:
1.引言
本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。
许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试 ......
3.内功题
试题1:分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)
解答:
BOOL型变量:if(!var)
int型变量: if(var==0)
float型变量:
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSI ......
很奇怪,以前一直以为C++是兼容C的,但是,今天用lex&yacc生成的C代码可用通过GCC的编译,
但是怎么都通不过G++的编译,而其错误很多,有可能是lex&yacc生成的C代码太老了,,,
我是这样解决的
把lex&yacc生成的代码 用 GCC -c 编译成 lex.o 的目标文件。然后 g++ main.cpp lex.o ,就OK了
记得: 在 main. ......
C++与Java的语法区别
首先,两个大的不同是主函数和怎样编译的不同,接下来是许多小的区别。
main 函数
C++
//自由浮动的函数
int main( int argc, char* argv[])
{
printf( "Hello, world" );
}
Java
// 每个函数都必须是一个类的一部分;当java <class>运行是一个特定类的主函数会被调 ......