惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
S
SegmentFault 最新的问题
D
DataBreaches.Net
H
Help Net Security
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
Martin Fowler
Martin Fowler
IT之家
IT之家
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
罗磊的独立博客
Y
Y Combinator Blog
阮一峰的网络日志
阮一峰的网络日志
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
Microsoft Security Blog
Microsoft Security Blog
J
Java Code Geeks
Vercel News
Vercel News
Hugging Face - Blog
Hugging Face - Blog
aimingoo的专栏
aimingoo的专栏
Stack Overflow Blog
Stack Overflow Blog
Recent Announcements
Recent Announcements
博客园 - 三生石上(FineUI控件)

博客园 - shaoyun

Python抓取百度搜索结果 多线程采集器的核心代码 ThinkPHP2.1模版使用笔记 - 模版嵌套/AJAX级联 畅想无线显示技术 ASP.Net 一步一步学习分页(适合初学者) - shaoyun - 博客园 OAuth协议分析一 通用四级联动下拉列表 通用手动分页方法 通用三级联动下拉列表 Indy 邮件发送的例子 Indy 组件学习注意事项 利用API的消息发送程序原理 Discuz!NT3.1 子目录安装实例 Delphi 托盘程序示例 Delphi ADO 学习笔记 SQL获取数据表的空间占用 C#编写简单的系统服务管理器 很久没有写博了,发发挠骚 Twitter被封后教你继续访问的方法
Delphi DLL 的编写
shaoyun · 2010-03-19 · via 博客园 - shaoyun

Delphi DLL 的编写 By Shaoyun 2010-03-18

最近打算继续学习Delphi,平常很少用,现在又有很长时间没动了!顺便将学习的内容写下来备忘!

例子代码: 

代码

 1 library SYLib;
 2 uses
 3     SysUtils,Classes;
 4 {$R *.res}
 5 function Max(x:Integer; y: Integer):Integer;stdcall;
 6 begin
 7 if x>then
 8     Result:= x
 9 else
10     Result:= y;
11 end;
12 
13 exports
14 Max;
15 
16 begin
17 end.

 Dephi为fastcall调用方式,C/C++是stdcall调用,为了DLL能让这些程序调用,最好声明为stdcall类型,exports导出函数,不导出是没法调用的!

调用方法有静态和动态两种:

静态调用,也是最常用的一种方法

在var后声明

function Max(x:Integer;y:Integer):Integer;stdcall; external 'SYLib.dll'

procedure TForm1.btn1Click(Sender: TObject);
begin
    ShowMessage(IntToStr(Max(2,3)));
end;

动态调用,麻烦些:

 1 procedure TForm2.btn1Click(Sender: TObject);
 2 type
 3 TFunType=function(x:Integer;y:Integer):Integer;stdcall;
 4 var
 5     dllHandle:THandle;
 6     pfun:TFarProc;
 7     _Max:TFunType;
 8 begin
 9 dllHandle:= LoadLibrary('SYLib.dll');
10 if dllHandle>0 then
11     try
12         pfun:=GetProcAddress(dllHandle,PAnsiChar('Max'));
13         if pfun<>nil then
14         begin
15             _Max:=TFunType(pfun);
16             ShowMessage(IntToStr(_Max(2,3)));
17         end
18     else
19         ShowMessage('没有找到Max函数!');
20     finally
21         FreeLibrary(dllHandle);
22     end
23 else
24     ShowMessage('没有找到SYLib.dll!');
25 end;

暂时就这些! Delphi2010 / Windows SP3 下测试!