惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
美团技术团队
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
A
About on SuperTechFans
Recent Announcements
Recent Announcements
D
Docker
Vercel News
Vercel News
Engineering at Meta
Engineering at Meta
腾讯CDC
Martin Fowler
Martin Fowler
阮一峰的网络日志
阮一峰的网络日志

博客园 - USEGEAR

学习unigui【48】lucksheet表格的显示object 学习使用 处理Python对象和列表【5】 学习使用TPythonDelphiVar组件 数据交换Delphi与Python传值【3】 学习使用 数据交换 Delphi 与 Python 传值【2】 学习使用 Python4Delphi 是什么【1】 学习unigui【47】扫码安装apk 学习unigui【46】让客户端浏览器可以选下载你的apk 学习unigui【45】UnimDatePicker等按钮汉化崩溃 学习unigui【44】如何和uinHTMLFrame打交道 学习unigui【43】如何和控件打交道 学习unigui【42】UnimDatePicker的使用 学习unigui【41】htmlframe的交互现象 学习unigui【40】加入监控墙-1 头大的内存泄漏 学习unigui【39】单独文件在ms win server 上执行的坑 学习unigui【38】重新认识UUNIGUI--为什么这样快? 站在“架构与性能”层面重新审视 学习unigui【37】nginx的反向代理 ,程序中的重新定向 学习unigui【36】把数据导航放在Unidbgrid脚中 学习unigui【35】dbgrid字段宽度自适应 KingSADA的工业历史数据库的访问
学习使用:创建 Python 可调用的 Delphi 函数【4】
USEGEAR · 2026-02-11 · via 博客园 - USEGEAR

这是 P4D 最强大的功能 - 让 Python 调用你的 Delphi 代码。

//定义函数包装器
uses
PythonEngine, MethodCallBack; // 【第1段】定义 Delphi 函数(必须符合特定签名) function AddNumbers(Self, Args: PPyObject): PPyObject; cdecl; var A, B: Integer; begin with GetPythonEngine do begin // 解析 Python 传来的参数 (两个整数) if PyArg_ParseTuple(Args, 'ii:AddNumbers', @A, @B) <> 0 then begin // 返回两数之和 Result := PyLong_FromLong(A + B); end else Result := nil; // 解析失败返回 nil end; end;
//注册函数到 Python
procedure TForm1.RegisterDelphiFunction;
begin
  PythonEngine1.LoadDll;
  
  // 【第2段】创建 Python 模块
  with PythonModule1 do  // TPythonModule 组件
  begin
    ModuleName := 'delphi_utils';  // Python 中 import 的名字
    
    // 添加方法: 方法名, 函数指针, 文档字符串
    AddMethod('add', @AddNumbers, 'Add two integers: add(a, b) -> int');
    
    // 【第3段】必须调用,实际注册到 Python
    Initialize;
  end;
  
  // 【第4段】Python 中调用 Delphi 函数
  PythonEngine1.ExecString(
    'import delphi_utils' + sLineBreak +
    'result = delphi_utils.add(10, 20)' + sLineBreak +
    'print(f"10 + 20 = {result}")'
  );
end;
PyArg_ParseTuple 解析 Python 参数,`'ii'` 表示两个整数     
cdecl 必须指定,匹配 Python C API 调用约定  
ModuleName Python 中 `import` 使用的模块名   
AddMethod 将 Delphi 函数暴露给 Python 

`PyArg_ParseTuple`