科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件 PYTHON 与C相互交互调用实例解析

PYTHON 与C相互交互调用实例解析

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

PYTHON 与C相互交互调用实例解析

作者:AnyJack 来源:CSDN 2008年5月25日

关键字: 调用 交互 python 软件

  • 评论
  • 分享微博
  • 分享邮件

PYTHON C相互交互调用实例解析

 

使用前工具:

Vc++编译器

Python 解释器

如没有装VC,可以去微软网站下一个C++的编译器,地址如下:

http://download.microsoft.com/download/3/9/b/39bac755-0a1e-4d0b-b72c-3a158b7444c4/VCToolkitSetup.exe

 

装完后,在环境变量中把PYTHONINCLUDELIBS分别加入下面2个宏

INCLUDE

LIB

 

1C中调用PYTHON

#include <Python.h>

int main(int argc, char *argv[])

{

Py_Initialize();

PyRun_SimpleString("from time import time,ctime\n"

"print 'Today is',ctime(time())\n");

Py_Finalize();

return 0;

}

直接用CL 文件名  编译就是

 

2、用C生成DLL,PYTHON调用

C代码:如FOO.C

#include <Python.h>

/* Define the method table. */

static PyObject *foo_bar(PyObject *self, PyObject *args);

static PyMethodDef FooMethods[] = {

{"bar",  foo_bar, METH_VARARGS},

{NULL, NULL}

};

/* Here's the initialization function.  We don't need to do anything

for our own needs, but Python needs that method table. */

void initfoo()

{

(void) Py_InitModule("foo", FooMethods);

}

/* Finally, let's do something ... involved ... as an example function. */

static PyObject *foo_bar(PyObject *self, PyObject *args)

{

char *string;

int   len;

if (!PyArg_ParseTuple(args, "s", &string))

return NULL;

len = strlen(string);

return Py_BuildValue("i", len);

}

C定义文件:foo.def

EXPORTS

initfoo

编译生成foo.dll

Cl -c foo.c;

link foo.obj /dll /def:foo.def /OUT:foo.dll

PYTHON中调用:

Import foo

Dir(foo)

即可以看到结果:

>>> import foo

>>> dir(foo)

['__doc__', '__file__', '__name__', 'bar']

>>> ^Z

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章