使用delphi 为python创建一个新的类型。

花费了一个晚上的时间,终于调试通过。时间长的原因是没有直接的文档和例子。时间不早了,紧急记录以下,主要看标注。

procedure initdemodll;
begin
try
gEngine := TPythonEngine.Create(nil);
gEngine.AutoFinalize := False;
gEngine.DllName := 'python24.dll';
gEngine.APIVersion := 1012 ;
//gEngine.LoadDll; 不能在这里,要想Type注册,必须放到AddClient之后
gModule := TPythonModule.Create(nil);
gModule.Engine := gEngine;
gModule.ModuleName := 'demodll';
gModule.AddMethod( 'add', @Add, 'add(a,b) -> a+b fffff' );
// form

PythonType:= TPythonType.Create(nil);
PythonType.Engine := gEngine ;
PythonType.Module := gModule ;
PythonType.TypeName := 'Point3';
PythonType.PyObjectClass := TPyPoint;
// AddClient 就是注册类型,为什么?不知道,最难的就是这里,很不容易猜测到通过这个方式来注册
gModule.AddClient(PythonType);
// 这个没有用处
//gModule.OnInitialization := form10.PythonType1Initialization ;
//gModule.Initialize;
gEngine.LoadDll;
except
end;
end;

一般过程:

输出一个函数很容易,可以看p4d的 demo09 .

这个文档http://starship.python.net/crew/mwh/toext/也写的很到位,尽管是基于C语言的。

输出一个类型就不简单。没有直接的文档。即使间接的也很少。p4dmoduledelphi是可以使用的,不过涉及的东西太多,一时摸不到头绪,C Api的手册就还在说PyObject的格式,更加云里雾里的。

还是源代码管用,看看p4dmoduledelphi,体会到AddClient,以测试果然就比较接近了 。

另外dll生成后要改扩展名pyd,并且丢到libsite-package内,就可以import了。

好了,现在还太乱,先写到,怕忘了,等到明天晚上有时间,整理代码,做一个教程。

评论:

------------------

1. 叫做大全的,一点也不全:http://blog.csdn.net/kernelspirit/archive/2006/05/29/760413.aspx

2. 这样的写法非常漂亮,直接,拳拳到肉,值得学习。

http://starship.python.net/crew/mwh/toext/node20.html

3. 这样就太复杂了。

http://starship.python.net/crew/mwh/toext/defining-new-types.html

4. 深入了解PyCApi时可以看看,不错的例子。

http://my.opera.com/yjfuk/blog/show.dml/459374

5. 同4 ,深入了解PyCApi时可以看看,不错的例子。

http://www-128.ibm.com/developerworks/cn/linux/l-pythc/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值