python调用Delphi写的Dll代码示例
作者:garfieldtom 发布时间:2023-07-25 09:33:53
标签:delphi,python,dll
首先看下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中调试通过。
来源:http://www.cnblogs.com/GarfieldTom/archive/2013/03/15/2961994.html
0
投稿
猜你喜欢
- 阅读上一篇:请给PNG8一个机会 系列二:对png8的误解Png8的在ie中的怪异表现:1.半透明的png8在ie6以下的浏览器显示为全透明
- WebDriver简介selenium从2.0开始集成了webdriver的API,提供了更简单,更简洁的编程接口。selenium web
- 前言很多前人曾说过,深度学习好比炼丹,框架就是丹炉,网络结构及算法就是单方,而数据集则是原材料,为了能够炼好丹,首先需要一个使用称手的丹炉,
- 如何使用pytorch加载并读取COCO数据集 环境配置基础知识:元祖、字典、数组利用PyTorch读取COCO数据集利用PyTorch读取
- “表情包”是现在非常流行的交流方式,通过一张图片就能把文字不能表达或不便于表达的情感给表示出来,表情包一经诞生,就统治了中国人的社交圈,尤其
- 本文实例讲述了python对数组进行反转的方法。分享给大家供大家参考。具体实现方法如下:arr = [1,2,3]arr.reverse()
- 最近在处理词向量这块,因为平时习惯把处理的词向量保存成文件,但是txt文件读取出来的都是string格式的数字,有必要转成float型上网查
- phpMyAdmin 是一套可以通过WEB来管理 MySQL-server 以及单一数据库的 PHP
- 目录项目地址:前言使用方式主要代码blive_record.pyconfig.py(配置文件)项目地址:https://github.com
- Python中的模块(.py文件)在创建之初会自动加载一些内建变量,__name__就是其中之一。Python模块中通常会定义很多变量和函数
- 本文实例讲述了Python图像处理之直线和曲线的拟合与绘制。分享给大家供大家参考,具体如下:在数据处理和绘图中,我们通常会遇到直线或曲线的拟
- 其实想实现这种功能很简单,首先要上传一个RAR的解压程序,就是RAR自己的解压程序,只需要它的核心程序RAR.EXE这个文件就可以了。然后就
- 元素的CSS样式,除了包括内联的(即通过style属性加上的)样式定义外,还有页面嵌入的css和外部引入的css两种方式。但在JS中通过el
- 客户端从服务端下载文件的流程分析: 浏览器发送一个请求,请求访问服务器中的某个网页(如:down.php),该网页的代码如下。 服务器接受到
- LOAD DATA INFILE '文件地址' INTO TABLE 表名 FIELDS TERMINATED BY
- 引言书接上回 Gradio机器学习模型快速部署工具【quickstart】翻译,讲到多输入输出,其实很简单,就是把多个组件包装到列表,inp
- 别人复制你网站的文章时自动加上注释,这个功能你在很多网站应该都有体会过,当我们复制一段内容时,就自动在文章后面加上了网站的一些
- 一、YOLOv5简介YOLOv5是一种目标检测算法,由ultralytics公司开发。它采用单一神经网络同时完成对象识别和边界框回归,并使用
- 运行代码框<html><META HTTP-EQUIV="Content-Type" content=
- dssaa 问:求一个如奥运倒计时牌那样显示的倒计时程序突然想到这样的一个小程序,不知道能不能做,比如我要在我的主页上挂一个页面,上面只显示