我试图从一个似乎是在Delphi中创建的DLL调用函数。 DLL支持的一些函数的示例是:
function oziDeleteWpByName(var name:pansichar):integer;stdcall
我为访问上述函数而编写的Python代码无效。
from ctypes import *
libc = cdll.OziAPI
name ='test'
pi = pointer(name)
delname = libc.oziDeleteWpByName
delname(name)
似乎我将错误的数据类型传递给函数。关于如何做到这一点的任何想法?
谢谢你的工作。现在请帮助这个功能:
function oziGetOziVersion(var Version:pansichar; var DataLength:integer):integer; stdcall; OziExplorer的版本在Version变量中返回。
现在如何传递'var version',它也将被返回。
答案 0 :(得分:11)
from ctypes import *
# Not strictly needed but it's good to be explicit.
windll.OziAPI.oziDeleteWpByName.argtypes = [POINTER(c_char_p)]
windll.OziAPI.oziDeleteWpByName.restype = c_int
p = c_char_p('test')
retval = windll.OziAPI.oziDeleteWpByName(byref(p))
答案 1 :(得分:1)
在Delphi中,var
参数通过引用传递。所以你有一个指向PAnsiChar
(又名C风格的字符串指针)的指针。如果你传给它一个字符串指针,而不是一个指向字符串指针的指针,它将不起作用。