ctypes调用void指针,ctypes调用静态库

  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的观点或立场.

ctypes调用void指针,ctypes调用静态库