• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

DelphiDLL的编写

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
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 下测试!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi自带的Base64编解码函数发布时间:2022-07-18
下一篇:
老陈---谈Delphi中SSL协议的应用[转]发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap