Delphi编写动态连接库DLL

这是转贴的一篇文章,是关于用Delphi编写DLL的,写得很好很完整,我把她转贴过来然后整理网上其它一些资料,稍作修改,留做自己的资料库,以后做项目的时候方便备查,呵呵

第一节、开使你的第一个DLL专案,步骤如下: 1)File->Close all->File->NewDLL

集成环境自动生成代码如下:

//------------------------------------------------------

//自动产生Code如下 

//------------------------------------------------------



library Project2; 



uses 



  SysUtils, Classes; 



{$R *.RES} 



begin 



end.
2)加个Func进来:

//------------------------------------------------------ 

//切记:

//1)Library 的名字大小写没关系,可是DLL-Func的大小写就有关系了。

//在DLL-Func-Name写成MyMax与myMAX是不同的。如果写错了,立即的结果是你叫用到此DLL的AP根本开不起来。参数的大小写就没关系了。甚至不必同名。如原型中是 (X,Y:integer)但引 用时写成(A,B:integer),那是没关系的。

//------------------------------------------------------ 

//切记:

//2)要再加个stdcall。

//书上讲,如果你是用Delphi写DLL,且希望不仅给Delphi-AP也希望BCB/VC-AP等使用的话,那你最好加个Stdcall ; 的指示参数型态。Delphi有很多种它自己的变量型态,这些当然不是DLL所喜欢的 ,Windows/DLL的母语应该是C。所以如果要传进传出DLL的参数,我们尽可能照规矩来用。这两者写起来,后者会麻烦不少。如果你对C不熟的话,那也没关系。我们以后再讲。

//------------------------------------------------------



library Project2; 

uses 

  SysUtils, 

  Classes; 



        Function MyMax ( X , Y : integer ) : integer ; stdcall ; 

        begin 

        if X > Y then 

            Result := X 

        else 

            Result := Y ; 

        end ; 



{$R *.RES} 



begin 

end. 
//------------------------------------------------------ 
//切记:1)Library 的名字大小写没关系,可是DLL-Func的大小写就有关系了。在DLL-Func-Name写成MyMax与myMAX是不同的。如果写错了,立即的结果是你叫用到此DLL的AP根本开不起来。参数的大小写就没关系了。甚至不必同名。如原型中是 (X,Y:integer)但引 用时写成(A,B:integer),那是没关系的。 
//切记:2)要再加个stdcall。书上讲,如果你是用Delphi写DLL,且希望不仅给Delphi-AP也希望BCB/VC-AP等使用的话,那你最好加个Stdcall ; 的指示参数型态:Delphi有很多种它自己的变量型态,这些当然不是DLL所喜欢的 ,Windows/DLL的母语应该是C。所以如果要传进传出DLL的参数,我们尽可能照规矩来用。这两者写起来,后者会麻烦不少。如果你对C不熟的话,那也没关系。我们以后再讲。
//------------------------------------------------------ 

library Project2; 
uses 
  SysUtils, 
  Classes; 

        Function MyMax ( X , Y : integer ) : integer ; stdcall ; 
        begin 
        if X > Y then 
            Result := X 
        else 
            Result := Y ; 
        end ; 

{$R *.RES} 

begin 
end. 
3)将这些可共享的Func送出DLL,你还要加个Exports才行让外界﹝就是你的Delphi-AP啦﹞使用。
{$R *.RES} 
exports 
    MyMax ; 
begin 
end.
 
4)好了,可以按 Ctrl-F9编译了。此时可不要按F9。DLL不是EXE,不可单独执行的,如果你按F9,会有ErrorMsg的。这时如果DLL有Error,请修正之。再按Ctrl-F9。此时可能有Warning,不要紧,研究一下,看看就好。再按Ctrl-F9,此时就『Done , Compiled 』。同目录就会有个 *.dll 。恭喜,大功告成了。

第二节、进行测试:开个新application步骤如下:

1.加个TButton

代码:   ShowMessage ( IntToStr(MyMax(30,50)) ) ;    2.告知Exe到那里抓个Func

代码: //------------------------------------------------------ //在Form,interface,var后加 //MyTestDLL.dll为你前时写的DLL项目名字 //DLL名字大小写没关系。不过记得要加 extension的 .DLL。 //在Win95或NT,是不必加 extension,但这两种OS,可能越来越少了吧。 //所以要加extension欧。 //------------------------------------------------------

Function MyMax ( X , Y : integer ) : integer ; stdcall ; external 'MyTestDLL.dll' ;

 

//------------------------------------------------------

//自动产生Code如下 

//------------------------------------------------------



library Project2; 



uses 



  SysUtils, Classes; 



{$R *.RES} 



begin 



end.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值