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 相关文章推荐
Python牛刀小试密码爆破
Feb 03 Python
在Python下进行UDP网络编程的教程
Apr 29 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
Aug 05 Python
python与sqlite3实现解密chrome cookie实例代码
Jan 20 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
python pyheatmap包绘制热力图
Nov 09 Python
python 搭建简单的http server,可直接post文件的实例
Jan 03 Python
Numpy与Pytorch 矩阵操作方式
Dec 27 Python
python编程进阶之异常处理用法实例分析
Feb 21 Python
关于python中的xpath解析定位
Mar 06 Python
Django 5种类型Session使用方法解析
Apr 29 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
Feb 03 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实现链结人气统计
2006/10/09 PHP
实用函数8
2007/11/08 PHP
PHP数组交集的优化代码分析
2011/03/06 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
浅谈super-vuex使用体验
2018/06/25 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python中将字典转换成其json字符串
2014/07/16 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
python 日期排序的实例代码
2019/07/11 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
金士达面试非笔试
2012/03/14 面试题
教师考察材料范文
2014/06/03 职场文书
财务会计专业求职信
2014/06/09 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python