首页 > 编程知识 正文

ctypes调用dll

时间:2023-05-06 05:34:55 阅读:269470 作者:2987

ctype调用DLL中的函数问题已经成功解决

(2005-10-12 12:56:18)

senddata.dll中的函数原型如下:

--------------------------------------------

int _stdcall SRDConnect(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:\mtform\dtp\senddata.dll')

#LoadLibrary先

srdConnect = hinst.SRDConnect

#这一步是关键,等同于C中的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*

srdConnect('f:\mtform\dtp\dtpw.exe',1,None)

#这里None原本是个结构在ctype中用class来代替,这里省略

srdOpenFile('f:\mtform\dtp\pingan\aaa.tpf',pfileno)

#pfileno就是一个int*

srdCloseFile(pfileno.contents)

#pointer.contents得到指针的内容

srdDisConnect()

还有其它的一些处理比如char*,数组,结构等处理,在文档中都有说明这里不再举例。

我看许多人卡壳就是不知如何得到Dll中的函数地址,昨晚我也是。奇怪的是在官方的文档中没有说明我的这种方法。文档中讲的其它方法我都试过了。

python的方便之处在于随时在命令行试。

分享:

喜欢

0

赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。