DLL绝对新手--开始写你的第一个DLL

字体大小: 中小 标准 ->行高大小: 标准
DLL是Windows的基石。AP没有搭配的DLL,很难玩的起来。小弟对DLL的涉猎有限,不敢写较深度的主题。只是将心得经验以一个DLL绝对新手要如何开始玩的角度来写。 

Delphi有个package,可以说就是Delphi版的DLL。初接触时觉得真是神奇的不得了,久了以后,发现它有些问题,就不怎么玩了。至于问题有那些,因为实在年代久远,都忘光了。各位有兴趣可以到网络上找找几位前辈的文章,讲的很清楚。小弟空时也把其中几篇关键的找贴Link来请大家参考参考。

    其实写DLL很简单,它几乎就像你的DelphiCode一般,没有什么大变化。如果你用的不是很深,不搅什么动态加载或数据共享,那你只要记住几个小原则就可以了。DLL实在太好用了,尤其是长期维护、多人开发的商业成品,更是少不了DLL。再加上它写起来很容易,你很可能会玩的太过火,及至滥用的程度。到时务请记得要收敛些。 

来写第一题吧。 

一、开使你的第一个DLL专案 
1.File->Close all->File->New﹝DLL﹞ 

代码:
 
//自动产生Code如下 
library Project2; 

//这边有段废话,不过如果你是第一次写DLL,你要仔细看看 
//至关紧要,别忘了。 
uses 
  SysUtils, 
  Classes; 

{$R *.RES} 

begin 
end.
 



2.加个Func进来: 

代码:
 
library Project2; 
uses 
  SysUtils, 
  Classes; 

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

begin 
end.
 



3.将这些可共享的Func送出DLL,让外界﹝就是你的Delphi-AP啦﹞使用:光如 
此,你的AP还不能用到这些,你还要加个Exports才行。 

代码:
 
{$R *.RES} 
exports 
    MyMax ; 
begin 
end.
 



4.好了,可以按 Ctrl-F9编译了。此时可不要按F9。DLL不是EXE┌不可单独执行的,如果你按F9,会有ErrorMsg的。这时如果DLL有Error,请修正之。再按Ctrl-F9。此时可能有Warning,不要紧,研究一下,看看就好。再按Ctrl-F9,此时就『Done , Compiled 』。同目录就会有个 *.dll 。恭喜,大功告成了。 

二、进行测试:开个新Exe专案: 
1.加个TButton 

代码:
 
ShowMessage ( IntToStr(MyMax(30,50)) ) ; 
 


2.告知Exe到那里抓个Func 

代码:
 
//在Form,interface,var后加 
Function MyMax ( X , Y : integer ) : integer ; stdcall ; external 'MyTestDLL.dll' ; 
// MyTestDLL.dll为你前时写的DLL项目名字 
// DLL名字大小写没关系。不过记得要加 extension的 .DLL。在Win95或NT, 
//     是不必加 extension,但这两种OS,可能越来越少了吧。要加extension欧。
 



可以了,简单吧。

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/68678.html