5

使用 Python4Delphi,将 Delphi 方法暴露给 Python 是相当简单的,这样 Python 就可以调用 Delphi 应用程序。但是,我无法将由 Delphi 方法创建的 Python 列表返回给 Python。例如:

function TDelphiAPI.callMethod : PPyObject;
begin
  // Create a new empty list of three elements
  result := GetPythonEngine.PyList_New(3);
end;

import mylib
p = mylib.DelphiAPI()
print p.callmethod()

从 Python 调用时,这将返回“NoneType”。如果将 PPyObject 更改为整数、AnsiString 或 double 等类型,Python 会选择正确的类型并正确显示它。我用

  GetPythonEngine.AddMethod ('callMethod', @TDelphiAPI.callMethod, 'callMmethod)');

从 Delphi 公开该方法。但是,据我所知,无法指定参数或返回类型的类型。

我想知道是否有人从 delphi python 类型(例如列表甚至 numpy 数组)返回?

4

1 回答 1

1

普通 Python 数组(与标准 CPython 一样)通常称为“列表”。Python 中的 numpy.array 类型(或可变列表)是一种特殊类型,它比普通 Py 浮点对象的普通 Python 列表更具内存和布局效率。如果您想使用 Delphi 并访问 Numpy.array 或列表,我想最直接的方法是实现一种方法来导出一些访问 Numpy.array 类型的简单 C 函数。

Numpy.array 包装了一个标准的内存块,作为原生 C 数组类型访问。反过来,这不会像 Delphi 方法创建的那样干净地映射到 Python 的 Delphi 数组类型。

于 2021-07-09T21:10:07.767 回答