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读取环境变量的方法和自定义类分享
Nov 22 Python
Python实现控制台输入密码的方法
May 29 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
Jan 17 Python
pandas 读取各种格式文件的方法
Jun 22 Python
python绘制简单彩虹图
Nov 19 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
python opencv如何实现图片绘制
Jan 19 Python
Python递归调用实现数字累加的代码
Feb 25 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
Django Form常用功能及代码示例
Oct 13 Python
python 生成正态分布数据,并绘图和解析
Dec 21 Python
python scrapy简单模拟登录的代码分析
Jul 21 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
多重?l件?合查?(一)
2006/10/09 PHP
PHP strtok()函数的优点分析
2010/03/02 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
Python卸载模块的方法汇总
2016/06/07 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
Python可以用来做什么
2020/11/23 Python
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
数学系毕业生的自我评价
2014/01/10 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
党的群众路线教育实践活动动员会主持词
2014/03/20 职场文书
交警失职检讨书
2015/01/26 职场文书
运动会广播稿300字
2015/08/19 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
六年级作文之自救
2019/12/19 职场文书
redis 解决库存并发问题实现数量控制
2022/04/08 Redis