粉碎4Delphi处理将灰尘主要DLL装入德尔菲方案的问题,将“灰色”译法纳入你们的德尔菲应用,但也有一些变质;用Delphi书写一个延伸。 以下是一些工作实例守则。
Iampe 第469页,载于Mark Hammond &Andy Robinson(O Reilly)。
A sample DLL skeleton for a Delphi DLL that implements a python extension might look like
this, taken from the Demo09 folder in Python4Delphi source distribution:
项目档案来源:
library demodll;
{$I Definition.Inc}
uses
SysUtils,
Classes,
module in module.pas ;
exports
initdemodll;
{$IFDEF MSWINDOWS}
{$E pyd}
{$ENDIF}
{$IFDEF LINUX}
{$SONAME demodll }
{$ENDIF}
begin
end.
实际推广单位(模块.pas):
unit module;
interface
uses PythonEngine;
procedure initdemodll; cdecl;
var
gEngine : TPythonEngine;
gModule : TPythonModule;
implementation
function Add( Self, Args : PPyObject ) : PPyObject; far; cdecl;
var
a, b : Integer;
begin
with GetPythonEngine do
begin
if PyArg_ParseTuple( args, ii:Add , [@a, @b] ) <> 0 then
begin
Result := PyInt_FromLong( a + b );
end
else
Result := nil;
end;
end;
procedure initdemodll;
begin
try
gEngine := TPythonEngine.Create(nil);
gEngine.AutoFinalize := False;
gEngine.LoadDll;
gModule := TPythonModule.Create(nil);
gModule.Engine := gEngine;
gModule.ModuleName := demodll ;
gModule.AddMethod( add , @Add, add(a,b) -> a+b );
gModule.Initialize;
except
end;
end;
initialization
finalization
gEngine.Free;
gModule.Free;
end.
请注意,可从python中提用的方法只能具有参数:sol, Args :PPyObject
,作为参数签字,Args值是Adhurtuple(一种与病媒或阵列相类似的可变数据结构)。 之后,你必须穿透镜头,在校内将提出1个或更多不同类型的论据。 那么,你必须处理以下事实:在座标内的每一件物品都可能是一种愤怒、扼杀、图谋、清单、字典等。
你们需要学会像在座标上一样,在 object物上使用一种方法:img.dim()
,从清单中获取物品等等。
看看<代码>PyArg_ParseTuple的哪里定义了(ctrl-click it),并寻找其他方法,首先采用<代码>Py,这些方法的名称可能包括PyList_GetItem
。 这是假歌(PyCATEGORY_MethodName
)使用的假装-OOP命名公约。 一旦看到一些样本代码,这完全容易。 可悲的是,大多数样本代码都在C。
你可能甚至会利用一种工具,将上面的沙捞越法变成C法典样本,然后试图按行文将它变成Avhur。 但这一切令我感到浪费时间。
另有一些陈列镜的功能是:
Py_BuildValue
- useful for return values
Py_INCREF
and Py_DECREF
- necessary for object reference counting.
You will need to know all the memory rules, and ownership rules here.