delphi编写与调用DLL(delphi7下测试通过)
http://blog.sina.com.cn/s/blog_4dbbf76f01000anz.html
delphi编写DLL
下面在delphi中编写一个简单的dll,在该dll中只有一个max函数,返回2个数中的大数(Delphi 5.0)
、New->DLL;取名为DLL_,编写代码:
library dll_;
uses
SysUtils,
Classes;
{$R *.RES}
function max(x,y:integer):integer;stdcall;
begin
if(x>y) then
max :=x
else
max :=y;
end;
exports max;
begin
end.
红色部分为自己编写,这里和普通的delphi函数是一样的,只是在返回值中带个stdcall参数,然后用exports把函数导出
================================================================================
Delphl调用dll
调用dll分动态调用和静态调用2中,动态调用写起来简单,安全点,动态调用复杂很多,但很灵活;
现在编写一个程序,来调用上面写的dll_.dll文件中的max函数
一、new一个Application,在Form中放入2个TEdit、个TLabek;
二、
、静态调用
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
procedure Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function max(x,y:integer):integer;stdcall;
external 'dll_0001.dll';
procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key =vk_return then
label1.Caption :=IntToStr(max(StrToInt(Edit1.text),StrToInt(edit2.text)));
end;
end.
红色代码自己添加,其中external "dll_name"中的dll_name可以是dll的绝对路径,要是该dll文件在你的搜索路径中,可以直接写文件名,但是.dll不能少写
、动态调用,代码如下;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
procedure Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
type
TFunc =function(x,y:integer):integer;stdcall;
var
Th:Thandle;
Tf:TFunc;
Tp:TFarProc;
begin
if key =vk_return then
begin
Th :=LoadLibrary('dll_0001.dll'); {load dll}
if(Th >) then
try
Tp :=GetProcAddress(Th,PChar('max'));
if(Tp <>nil) then
begin { begin 1}
Tf :=TFunc(Tp);
Label1.Caption :=IntToStr(
Tf(StrToInt(Edit1.text),StrToInt(Edit2.text)));
end { end 1}
else
ShowMessage('function max not found.');
finally
FreeLibrary(Th);
end
else
ShowMessage('dll_0001.dll not exsit.'); end;
end;
end.
delphi编写与调用DLL(delphi7下测试通过)的更多相关文章
- delphi 基础之三 编写和调用dll文件
delphi 编写和调用dll文件 Windows 的执行文件可以划分为两种形式程序和动态连接库 (DLLs).一般程序运行是用.EXE文件,但应用程序有时也可以调用存储在DLL的函数. 在如下几 ...
- 在Delphi中静态调用DLL
在Delphi中静态调用DLL top 调用一个DLL比写一个DLL要容易一些.首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较.同样的,我们先举一个静态调用的例子. u ...
- LR调用DLL(加密测试等)
利用LoadRunner实现加密测试,哇咔咔2015-05-12 10:17:06标签:编译器 加密 用户在进行LoadRunner打压时,有时候请求的参数是加密的,而加密的法则是通过调用一段DLL来 ...
- 分享一次C#调用Delphi编写Dll程序
1.前言: 最近接手了一个项目需要和Delphi语言编写的一个系统进行一些接口的对接,数据在传输过程中采用Des加密方式,因为Delphi 平台的加密方式和C#平台的加密方式不互通,所以采用的方式是C ...
- DLL编写与调用全解
DLL编写与调用全解 DELPHI学习 2008-12-23 22:52 阅读8 评论0 字号: 大 中 小 第一章 为什么要使用动态链接库(DLL) top 提起DLL您一定不会 ...
- 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记
前言 结对作业要求一出来,我就立刻想到了把“计算核心”封装成dll,然后使用vb.net编写UI调用dll的思路.然而在实现过程中却遇到了很多的问题. 我在这个过程中是负责使用vb.net编写UI并调 ...
- exe调用DLL的方式
假设被调用的DLL存在一个导出函数,原型如下: void printN(int); 三种方式从DLL导入导出函数 生成DLL时使用模块定义 (.def) 文件 在主应用程序的函数定义中使用关键字__d ...
- nodejs调用delphi编写的dll
公司的业务需要,nodejs要读取文件版本号. 同事要求我用delphi编写dll,以供nodejs调用,结果通过json返回. delphi代码如下: function GetFileInfo(AP ...
- 在VS2008环境下编写C语言DLL,并在C++和C#项目下调用 (转载)
1.编写DLL a)文件--打开--新建项目--Win32,右侧Win32项目,填写好项目名称,点击"下一步", 应用程序类型选择:"DLL(D)",附加选项: ...
随机推荐
- python的杨辉三角
# # / \ # # / \ / \ # # / \ / \ / \ # # / \ / \ / \ / \ # # / \ / \ / \ / \ / \ # # ---------------- ...
- easyui 获取特定页签tab
var findTab=$('#mytabs').tabs('getTab','财务信息').panel('options').tab; var findTabIndex = $('#tab').ta ...
- Minimum Size Subarray Sum LT209
Given an array of n positive integers and a positive integer s, find the minimal length of a contigu ...
- 数据结构和Java集合
list接口,可重复,有序的.list有arrayList,因为是数组结构,适合用在数据的查询,linkedList,因为是链表结构,适合用在增删操作.数组如果增删的话,需要后面的元素都往前或者往后移 ...
- sublime使用技巧
引用自:https://www.cnblogs.com/xiayuhao/p/9000216.html https://www.cnblogs.com/ma-dongdong/p/7653231.ht ...
- 清华大学 TUNA 协会
https://tuna.moe/ 技术,实力,优越感,环境..,镜像
- javascript对象的属性,方法,prototype作用范围分析.
用了javascript这么久由于没有系统学习过基础,总是拿来主义. 所以对一些基础知识还是搞不清楚很混乱. 今天自己做个小例子,希望彻底能搞清楚. 注释中对象只例子的对象本身,原型只原型继承对象的新 ...
- python使用Fabric模块实现自动化运维
简介:Fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括:命令执行.文件上传.下载及完整 ...
- Mysql 数据库修改datadir和调整默认引擎要注意的问题
数据库更改 datadir 默认位置: 首先前面的基础操作我就不多说了,无非是复制mysqldata目录,然后修改 my.conf 配置文件 datadir 的 路径地址.然后重启mysql.这里可能 ...
- 2018.12.08 codeforces 914D. Bash and a Tough Math Puzzle(线段树)
传送门 线段树辣鸡题. 题意简述:给出一个序列,支持修改其中一个数,以及在允许自行修改某个数的情况下询问区间[l,r][l,r][l,r]的gcdgcdgcd是否可能等于一个给定的数. 看完题就感觉是 ...