ctypes调用void指针,ctypes调用静态库
ctype调用DLL中的函数问题已成功解决。
(2005-10-12 12:56:18)
senddata.dll的功能原型如下:
-
int _ stdcall SRD connect(char * ExecName,int ShowState,RECT * Rect);#连接系统
int _ stdcall SRDDisConnect();#关闭
int _ stdcall SRDOpenFile(char * FileName,int * FileNo);#打开模板
int _ stdcall SRDCloseFile(int FileNo);#关闭模板
python中相应的函数声明如下:
-
hinst=ctypes . windll . loadlibrary( f:\ \ mt form \ \ DTP \ \ send data . dll )
#LoadLibrary优先
srdConnect=hinst。SRDConnect
#这一步是关键,相当于GetProcAddress(HInst,
#SRDConnect ),通过名称获取函数地址(指针)
srdDisConnect=hinst。SRDDisConnect
#以下是其他函数。
srdOpenFile=hinst。SRDOpenFile
srdCloseFile=hinst。SRDCloseFile
fileno=ctypes.c_int(0)
#因为要使用int *,所以这是在ctype中完成的。
pfileno=ctypes.pointer(fileno)
#poionter就是把一个int变成一个int*
SRD connect( f:\ \ mt form \ \ DTP \ \ dtpw . exe ,1,None)
#这里,None原本是一个结构,在ctype中被class代替,这里省略。
srdOpenFile( f:\ \ mt form \ \ DTP \ \ Pingan \ \ AAA . TPF ,pfileno)
#pfileno是一个整数*
srdCloseFile(文件号目录)
#pointer.contents获取指针内容。
srdDisConnect()
还有其他的处理,比如char*、数组、结构等。文档中都有描述,这里就不举例了。
我看到很多人卡住了,就是不知道怎么获取Dll里的函数地址。昨晚,我也是。奇怪的是,我的方法在官方文件中没有说明。文件中提到的其他方法我都试过了。
python的方便之处在于可以随时在命令行上尝试。
分享:
喜欢
0
礼品笔
正在加载,请稍候。
正在加载评论,请稍候。
评论
登录名:密码:取回密码,注册并记住您的登录状态。
昵称:
评论转载这篇博文。
评论
网友以上言论仅代表其个人观点,不代表Sina.com的观点或立场.
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。