python读取c语⾔的数据结构,2.Python调⽤C语⾔之常⽤变量
与数据结构
好吧,之前讲了⼀下怎么调⽤链接库。当然会调⽤也要会传参数咯,现在就讲讲怎么传递参数吧。
利⽤dir函数,我们可以看见ctypes⾥⾯有如下东东。
这些就是常⽤的参数,对应表不⼀⼀列举了,只要你能常⽤C或者C++,就能够看明⽩,挺简单的吧。
Example 1:
⾸先附上最简单的DLL代码,拿到vs可以直接编译(不要鄙视我
)
#include "stdafx.h"
#include
#define DLLAPI extern "C" _declspec(dllexport)
DLLAPI void printstr(char* str)
{
printf("%s\n",str);
}
DLLAPI int add(int a,int b)
{
return a+b;
}
from ctypes import *
dllpath='C:\\Users\\**\\Documents\\Visual Studio 2010\\Projects\\EasyDll\\Release\\EasyDll.dll'
dll=CDLL(dllpath)
_str=c_char_p('Hello world,Hello Chengdu')
a=c_int(125)
b=c_int(125)
dll.printstr(_str)
print dll.add(a,b)
x=raw_input('any key to continue')
结果:
接下来就要讲讲结构体的传递了。结构体也很简单啊,毕竟讨论是固定的东西对不?
Exmaple 2:
还是先附上DLL代码:
#include "stdafx.h"
#include
#define DLLAPI extern "C" _declspec(dllexport)
typedef struct TestDLL
{
int a;
char *b;编程先学c语言还是python
}testdll;
DLLAPI testdll test(testdll t)
{
t.a=t.a+t.a;
printf("%d\n%s\n",t.a,t.b);
return t;
}
再附上Python代码:
#coding=gbk
from ctypes import *
dllpath='C:\\Users\\**\\Documents\\Visual Studio 2010\\Projects\\EasyDll\\Release\\EasyDll.dll' dll=CDLL(dllpath)
a=c_int(125)
b=c_char_p('Hello world,Hello Chengdu')
class testdll(Structure):
_fields_=[('a',c_int),
('b',c_char_p)]
t=testdll()#初始化结构体
t.a=a
t.b=b
st(t)#执⾏函数
print t.a
print t.b
x=raw_input('any key to continue')
⼤致步骤例⼦⾥⾯写得很清楚了,包括传递结构体和接受结构体。
其中python这边仿造结构体是⼀个固定的套路。
1.构造结构体需要新建⼀个类,此类继承⼀个叫做Structure的类。
2.参数都放在_fields_这个list⾥⾯
3.需要⼿动设置结构体返回参数类型
4.开⼼的调⽤吧
PS:Python也是可以调⽤联合体的,继承的类改成Union即可,⼤家如果感兴趣可以⾃⼰去看看。
现在基本上能⽤Python简单的调⽤C语⾔了吧!
指针是C语⾔的精华之⼀,所以想要真正的对接Python与C语⾔,必须还得学⼀学Python如何使⽤指针!下⼀篇博客就会讲⼀讲Python与C语⾔指针的那些事⼉!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论