python调用Delphi写的Dll代码示例


Posted in Python onDecember 05, 2017

首先看下Delphi单元文件基本结构:

unit Unit1;  //单元文件名 
interface   //这是接口关键字,用它来标识文件所调用的单元文件 
uses     //程序用到的公共单元 
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; 

type     //这里定义了程序所用的组件,一些类,以及组件所对应的过程、事件 
TForm1 = class(TForm) 
private   //定义私有变量和私有过程 
  { Private declarations }
public   //定义公共变量和公共过程 
  { Public declarations }
end; 
  
var      //定义程序使用的公共变量 
Form1: TForm1; 

implementation //程序代码实现部分 

{$R *.dfm}
  
end.

Delphi单元如下(输出hello.dll):

unit hellofun;

interface

function getint():integer;stdcall;
function sayhello(var sname:PAnsiChar):PAnsiChar;stdcall;
implementation

function getint():integer;stdcall;
begin
 result:=888;
end;
function sayhello(var sname:PAnsiChar):PAnsiChar;stdcall;
begin
 sname:='ok!';
 result:='hello,garfield !';
end;

end.
library hello;

{ Important note about DLL memory management: ShareMem must be the
 first unit in your library's USES clause AND your project's (select
 Project-View Source) USES clause if your DLL exports any procedures or
 functions that pass strings as parameters or function results. This
 applies to all strings passed to and from your DLL--even those that
 are nested in records and classes. ShareMem is the interface unit to
 the BORLNDMM.DLL shared memory manager, which must be deployed along
 with your DLL. To avoid using BORLNDMM.DLL, pass string information
 using PChar or ShortString parameters. }

uses
 System.SysUtils,
 System.Classes,
 hellofun in 'hellofun.pas';

{$R *.res}

exports
 getint,
 sayhello;

begin
end.

python中调用如下:

import ctypes

def main():
  dll=ctypes.windll.LoadLibrary("hello.dll")
  ri=dll.getint()
  print(ri)

  s=ctypes.c_char_p()
  rs=ctypes.c_char_p()
  rs=dll.sayhello(ctypes.byref(s))
  print(s)
  print(ctypes.c_char_p(rs))

if __name__ == '__main__':
  main()

运行Python,输出如下:

>>> 
888
c_char_p(b'ok!')
c_char_p(b'hello,garfield !')
>>>

好了,我们可以让python完成部分功能在Delphi中调用,也可以用Delphi完成部分功能在Python中调用。

以上程序在DelphiXE2及Python3.2中调试通过。

总结

以上就是本文关于python调用Delphi写的Dll代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
bpython 功能强大的Python shell
Feb 16 Python
wxPython之解决闪烁的问题
Jan 15 Python
Python的numpy库中将矩阵转换为列表等函数的方法
Apr 04 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
Oct 30 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
Jan 14 Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 Python
python脚本和网页有何区别
Jul 02 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
python中pyqtgraph知识点总结
Jan 26 Python
Pytest之测试命名规则的使用
Apr 16 Python
Python字典数据对象拆分的简单实现方法
Dec 05 #Python
python reduce 函数使用详解
Dec 05 #Python
有趣的python小程序分享
Dec 05 #Python
详细分析python3的reduce函数
Dec 05 #Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 #Python
Python编程实现二分法和牛顿迭代法求平方根代码
Dec 04 #Python
Python编程给numpy矩阵添加一列方法示例
Dec 04 #Python
You might like
PHP令牌 Token改进版
2008/07/18 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
php实现微信发红包功能
2018/07/13 PHP
php中的依赖注入实例详解
2019/08/14 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
Mac下安装vue
2018/04/11 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
Python模拟登录验证码(代码简单)
2016/02/06 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
对numpy中二进制格式的数据存储与读取方法详解
2018/11/01 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
《两只鸟蛋》教学反思
2014/02/10 职场文书
采购部经理岗位职责
2014/02/10 职场文书
汽车专业求职信
2014/06/05 职场文书
董事长秘书工作职责
2014/06/10 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书
商业计划书格式、范文
2019/03/21 职场文书
Python 中 Shutil 模块详情
2021/11/11 Python