use*_*880 9 python delphi dll ctypes
我试图从DLL中调用函数,这似乎是在Delphi中创建的.DLL支持的一些函数的示例是:
function oziDeleteWpByName(var name:pansichar):integer;stdcall
Run Code Online (Sandbox Code Playgroud)
我为访问上述函数而编写的Python代码不起作用.
from ctypes import *
libc = cdll.OziAPI
name ='test'
pi = pointer(name)
delname = libc.oziDeleteWpByName
delname(name)
Run Code Online (Sandbox Code Playgroud)
我似乎将错误的数据类型传递给函数.关于如何做到这一点的任何想法?
谢谢它的工作.现在请帮助这个功能:
function oziGetOziVersion(var Version:pansichar; var DataLength:integer):integer; stdcall; OziExplorer的版本在Version变量中返回.
现在我如何传递'var version',它也将被返回.
yak*_*yak 12
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))
Run Code Online (Sandbox Code Playgroud)
在Delphi 中,var参数是通过引用传递的。所以你拥有的是一个指向 a 的指针PAnsiChar(又名 C 风格字符串指针)。如果您向它传递一个字符串指针,而不是指向字符串指针的指针,它将不起作用。
| 归档时间: |
|
| 查看次数: |
2530 次 |
| 最近记录: |