如何用Delphi编写dll文件

[11-20 17:13:35]   来源:http://www.88dzw.com  嵌入式系统   阅读:8374

文章摘要: 1.加个TButton 代码:ShowMessage ( IntToStr(MyMax(30,50)) ) ;2.告知Exe到那里抓个Func 代码://在Form,interface,var后加 Function stdcall ; external 'MyTestDLL.dll' ; // MyTestDLL.dll为你前时写的DLL项目名字 // DLL名字大小写没关系。不过记得要加 extension的 .DLL。在Win95或NT,是不必加 extension,但这两种OS,可能越来越少了吧。要加extension在delphi 1或

如何用Delphi编写dll文件,标签:嵌入式系统开发,嵌入式开发,http://www.88dzw.com

  1.加个TButton

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

  2.告知Exe到那里抓个Func

          代码:  //在Form,interface,var后加

  Function stdcall ; external 'MyTestDLL.dll' ;

  // MyTestDLL.dll为你前时写的DLL项目名字

// DLL名字大小写没关系。不过记得要加 extension的 .DLL。在Win95或NT,是不必加 extension,但这两种OS,可能越来越少了吧。要加extension

在delphi 1或delphi 2环境下该调用参数是far。从delphi 3以后将这个参数变为了stdcall,目的是为了使用标准的Win32参数传递技术来代替优化的register参数。

1.在DLL中编写的函数或过程都必须加上stdcall调用参数。

2.所写的函数和过程应该用exports语句声明为外部函数。

3.当使用了长字符串类型的参数、变量时要引用ShareMem。

一、正如大家看到的,我们在external语句中指定了所要调用的DLL文件的名称。没有写路径是因为该DLL文件和调用它的主程序在同一目录下。如果该DLL文件在C:\,则我们可将上面的引用语句写为external ’C:\delphi.dll’。注意文件的后缀.dll必须写上。

二、不能从DLL中调用全局变量

  如果我们在DLL中声明了某种全局变量,如:var s:byte 。这样在DLL中s这个全局变量是可以正常使用的,但s不能被调用程序使用,既s不能作为全局变量传递给调用程序。不过在调用程序中声明的变量可以作为参数传递给DLL。

三、被调用的DLL必须存在

  这一点很重要,使用静态调用方法时要求所调用的DLL文件以及要调用的函数或过程等等必须存在。如果不存在或指定的路径和文件名不正确的话,运行主程序时系统会提示“启动程序时出错”或“找不到*.dll文件”等运行错误。

  1 、我们知道DLL在编写时是不能运行和单步调试的。有一个办法可以,那就是在Run|parameters菜单中设置一个宿主程序。在Local页的Host Application栏中添上宿主程序的名字就可进行单步调试、断点观察和运行了。

  2 、添加DLL的版本信息。开场白中提到了版本信息对于DLL是很重要的,如果包含了版本信息,DLL的大小会增加2Kb。增加这么一点空间是值得的。很不幸我们如果直接使用Project|options菜单中Version选项是不行的,这一点delphi的帮助文件中没有提到,经笔者研究发现,只要加一行代码就可以了。如下例:

library delphi;

uses

SysUtils, Classes;

{$R *.RES}

//注意,上面这行代码必须加在这个位置

functionstdcall;

begin    Result:=i;    end;

exports TestDll;

begin

end.

  1 、在用静态方法时,可以给被调用的函数或过程更名。在前面提到的C++编写的DLL例子中,如果去掉extern ”C”语句,C++会编译出一些奇怪的函数名,原来的TestC函数会被命名为@TestC$s等等可笑的怪名字,这是由于C++采用了C++ name mangling技术。这个函数名在delphi中是非法的,我们可以这样解决这个问题:

改写引用函数为

functionstdcall;

external ’Cpp.dll’;name ’@TestC$s’;     其中name的作用就是重命名。

  2 、可把我们编写的DLL放到Windows目录下或者Windows\system目录下。这样做可以在external语句中或LoadLibrary语句中不写路径而只写DLL的名称。但这样做有些不妥,这两个目录下有大量重要的系统DLL,如果您编的DLL与它们重名的话其后果简直不堪设想,况且您的编程技术还不至于达到将自己编写的DLL放到系统目录中的地步吧!

上一页  [1] [2] [3] [4] [5] [6] [7] [8]  下一页


Tag:嵌入式系统嵌入式系统开发,嵌入式开发嵌入式系统

《如何用Delphi编写dll文件》相关文章