python调用DLL问题(急)

python调用DLL问题(急)

test.DLL中封装了几个函数
int A()
int B(int Handle, ref long Len_s1, ref long Len_s2)

其中,Handle是调用A后得到的句柄,需要传入到B中

python实现:

import cytpes

#加载DLL

tt=ctypes.CDLL('C:\\Python26\\test.dll')

s1=A();
ss=ctypes.c_int()
ssd=ctypes.c_int()
s2=B(s1,ctypes.byref(ss),ctypes.byref(ssd))

从s2的返回值来看,调用是成功的,但是ss,和ssd的值始终为零,请各位大虾帮帮忙看看是什么问题

ref long Len_s1, ref long Len_s2这是什么意思?


QUOTE:
原帖由 luffy.deng 于 2009-1-5 18:13 发表
ref long Len_s1, ref long Len_s2这是什么意思?

这个好像是C++中得吧~
应该是指出该参数是一个对象得引用
ref long Len_s1, ref long Len_s2就是说,Len_s1,Len_s2是一个long型的引用,可以这么理解~

其实,这两个参数的值是由该函数处理后,需要在外面其他地方使用的
ss    ssd 你也没赋值啊。你赋个值试试 比如。
ss=ctypes.c_int()
ss=15



QUOTE:
原帖由 luffy.deng 于 2009-1-6 08:35 发表
ss    ssd 你也没赋值啊。你赋个值试试 比如。
ss=ctypes.c_int()
ss=15

ss和ssd的赋值也只能是 ss=ctypes.c_int(10),ssd=ctypes.c_int(20)这样赋值,否则,ss和ssd就不是ctypes类型了

即使对ss和ssd进行赋值后,执行B函数后,ss和ssd的值还是零。



是不是对C++的DLL库,ctypes不支持活着不能使用,而ctypes只能用于C的DLL库,昨天在查找的时候,看到有人这么说,但不确定是否正确

ss.value=15这样也是可行的。能不能给一个test.dll?


QUOTE:
原帖由 luffy.deng 于 2009-1-6 09:42 发表
ss.value=15这样也是可行的。能不能给一个test.dll?

真实的dll,因某些原因可能无法提供了~

不过,我可以说明我使用该DLL的部分功能,你可以尝试自己创建一个试试

该DLL调用底层驱动程序,获得磁盘在一定时间内的读写文件的字节数,并在B函数中返回


而上述的ss以及ssd就是返回的字节数

c++不会
test.DLL中封装了几个函数
int A()
int B(int Handle, ref long Len_s1, ref long Len_s2)

python中调用
from ctypes import *

test = CDLL("test")

A = test.A
A.restype = c_int

B = test.B
B.restype = c_int
B.argtypes = [c_int, c_void_p, c_void_p]

#然后通过引用来调用
va1 = 0
va2 = 0
s2 = B( A(), byref(va1), bref(va2) )


QUOTE:
原帖由 newrain 于 2009-1-6 11:20 发表
va1 = 0
va2 = 0

...

其中
va1,va2得赋值应该是va1=ctypes.c_int(),va2=ctypes.c_int()

但是执行完B函数后,va1和va2得值还是零