用delphi写你的dll文件(2)
|
源代码网整理以下在Delphi中静态调用DLL top 源代码网整理以下 调用一个DLL比写一个DLL要容易一些。首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较。同样的,我们先举一个静态调用的例子。 源代码网整理以下 源代码网整理以下interface 源代码网整理以下uses 源代码网整理以下type 源代码网整理以下var 源代码网整理以下implementation 源代码网整理以下{$R *.DFM} 源代码网整理以下//本行以下代码为我们真正动手写的代码 源代码网整理以下function TestDll(i:integer):integer;stdcall; 源代码网整理以下procedure TForm1.Button1Click(Sender: TObject); 源代码网整理以下end. 源代码网整理以下被过滤广告 上面的例子中我们在窗体上放置了一个编辑框(Edit)和一个按钮(Button),并且书写了很少的代码来测试我们刚刚编写的Delphi.dll。大家可以看到我们唯一做的工作是将TestDll函数的说明部分放在了implementation中,并且用external语句指定了Delphi.dll的位置。(本例中调用程序和Delphi.dll在同一个目录中。)让人兴奋的是,我们自己编写的TestDll函数很快被Delphi认出来了。您可做这样一个实验:输入“TestDll(”,很快Delphi就会用fly-by提示条提示您应该输入的参数是什么,就像我们使用Delphi中定义的其他函数一样简单。注意事项有以下一些: 源代码网整理以下二、用external语句指定被调用的DLL文件的路径和名称 源代码网整理以下三、不能从DLL中调用全局变量 源代码网整理以下四、被调用的DLL必须存在 源代码网整理以下 源代码网整理以下在Delphi中动态调用DLL top 源代码网整理以下 动态调用DLL相对复杂很多,但非常灵活。为了全面的说明该问题,这次我们举一个调用由C++编写的DLL的例子。首先在C++中编译下面的DLL源程序。 源代码网整理以下 源代码网整理以下extern ”C” _declspec(dllexport) 软件开发网 www.mscto.com
源代码网整理以下 源代码网整理以下 大家已经看到了,这种动态调用技术很复杂,但只要修改参数,如修改LoadLibrary(’Cpp.dll’)中的DLL名称为’Delphi.dll’就可动态更改所调用的DLL。 源代码网整理以下一、定义所要调用的函数或过程的类型 软件开发网 www.mscto.com
源代码网整理以下二、释放所调用的DLL 源代码网整理以下 现在我们来评价一下两种调用DLL的方法的优缺点。静态方法实现简单,易于掌握并且一般来说稍微快一点,也更加安全可靠一些;但是静态方法不能灵活地在运行时装卸所需的DLL,而是在主程序开始运行时就装载指定的DLL直到程序结束时才释放该DLL,另外只有基于编译器和链接器的系统(如Delphi)才可以使用该方法。动态方法较好地解决了静态方法中存在的不足,可以方便地访问DLL中的函数和过程,甚至一些老版本DLL中新添加的函数或过程;但动态方法难以完全掌握,使用时因为不同的函数或过程要定义很多很复杂的类型和调用方法。对于初学者,笔者建议您使用静态方法,待熟练后再使用动态调用方法。 源代码网整理以下 源代码网整理以下使用DLL的实用技巧 top 软件开发网 www.mscto.com 源代码网整理以下一、编写技巧 源代码网整理以下 2 、为了保证DLL的通用性,应该在自己编写的DLL中杜绝出现可视化控件的名称,如:Edit1.Text中的Edit1名称;或者自定义非Windows定义的类型,如某种记录。 源代码网整理以下 3 、为便于调试,每个函数和过程应该尽可能短小精悍,并配合具体详细的注释。 源代码网整理以下 4 、应多利用try-finally来处理可能出现的错误和异常,注意这时要引用SysUtils单元。 源代码网整理以下 5 、尽可能少引用单元以减小DLL的大小,特别是不要引用可视化单元,如Dialogs单元。例如一般情况下,我们可以不引用Classes单元,这样可使编译后的DLL减小大约16Kb。 软件开发网 www.mscto.com
源代码网整理以下二、调用技巧 源代码网整理以下 源代码网整理以下其中name的作用就是重命名。 软件开发网 www.mscto.com 源代码网整理以下 2 、可把我们编写的DLL放到Windows目录下或者Windowssystem目录下。这样做可以在external语句中或LoadLibrary语句中不写路径而只写DLL的名称。但这样做有些不妥,这两个目录下有大量重要的系统DLL,如果您编的DLL与它们重名的话其后果简直不堪设想,况且您的编程技术还不至于达到将自己编写的DLL放到系统目录中的地步吧! 源代码网整理以下三、调试技巧 源代码网整理以下 2 、添加DLL的版本信息。开场白中提到了版本信息对于DLL是很重要的,如果包含了版本信息,DLL的大小会增加2Kb。增加这么一点空间是值得的。很不幸我们如果直接使用Project|options菜单中Version选项是不行的,这一点Delphi的帮助文件中没有提到,经笔者研究发现,只要加一行代码就可以了。如下例: 源代码网整理以下uses 源代码网整理以下{$R *.RES} 源代码网整理以下function TestDll(i:integer):integer;stdcall; 源代码网整理以下exports 源代码网整理以下begin 源代码网整理以下 软件开发网 www.mscto.com 源代码网整理以下 4 、如果您原来在Delphi 1或Delphi 2中已经编译了某些DLL的话,您原来编译的DLL是16位的。只要将源代码在新的Delphi 3或Delphi 4环境下重新编译,就可以得到32位的DLL了。 源代码网整理以下[后记]:除了上面介绍的DLL最常用的使用方法外,DLL还可以用于做资源的载体。例如,在Windows中更改图标就是使用的DLL中的资源。另外,熟练掌握了DLL的设计技术,对使用更为高级的OLE、COM以及ActiveX编程都有很多益处。 源代码网推荐 源代码网供稿. |
