Python传递Pointer到Delphi函数

时间:2013-04-02 13:09:11

标签: python delphi dll ctypes

我有dll,在Delphi中构建,我尝试从中调用函数。功能声明如下:

function GetUid(UID:Pointer):Integer; stdcall;

这相当于这个C函数签名:

 int GetUID(void *pointer);

使用ctypes处理的库:

from ctypes import *

lib = cdll.LoadLibrary("mylib.dll")

但我卡在这里:

res = lib.GetUid(?)

我需要通过这个功能吗? 指针无效*,但是如何在python中正确使用它?

1 个答案:

答案 0 :(得分:0)

Python是一种高级语言。您通常不会从C或Pascal本机库导入DLL并调用它并将变量从Python传递到C或Pascal函数中,采用void *类型的原始指针,然后以这种方式操作原始内存。

简而言之,如果你知道自己在做什么,那么你就会比在这里做的更好。

我们假设您的实现是这样的:

function GetUid(UID:Pointer):Integer; stdcall;
var
  P2:^Integer;
begin
  P2 := UID;
  P2^ := 0;
end;

然后,您要做的是将地址传递给32位整数。当然,我上面的例子是荒谬的,因为上面有意义的是将参数声明为“int *指针”(用C语言表示)而不是“void * pointer”。

无论你正在做什么,接下来可能会发生的事情是你会破坏你的python解释器的堆,并导致很多有趣的崩溃和错误。

一个更为明智的方法是阅读Python文档,编写可以操作本机Python类型(PyObject)的C扩展,并在pascal中执行相同的操作,如果您愿意的话。

p4d似乎是在delphi中编写扩展DLL的可行方法:

    https://code.google.com/p/python4delphi/source/list