Python可以在DLL中调用Delphi函数吗?

时间:2012-01-09 14:42:56

标签: python delphi dll ctypes

我试图从一个似乎是在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',它也将被返回。

2 个答案:

答案 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风格的字符串指针)的指针。如果你传给它一个字符串指针,而不是一个指向字符串指针的指针,它将不起作用。