如何用Delphi编写dll文件
[11-20 17:13:35] 来源:http://www.88dzw.com 嵌入式系统 阅读:8374次
文章摘要:3.当使用了长字符串类型的参数、变量时要引用ShareMem。 delphi中的string类型很强大,我们知道普通的字符串长度最大为256个字符,但delphi中string类型在默认情况下长度可以达到2G。(对,您没有看错,确实是两兆。)这时,如果您坚持要使用string类型的参数、变量甚至是记录信息时,就要引用ShareMem单元,而且必须是第一个引用的。既在uses语句后是第一个引用的单元。如下例: uses ShareMem, SysUtils, Classes;还有一点,在您的工程文件(*.dpr)中而不是单元文件(*.pas)中也要做同样的工作,这一点delphi自带的帮助文件没
如何用Delphi编写dll文件,标签:嵌入式系统开发,嵌入式开发,http://www.88dzw.com3.当使用了长字符串类型的参数、变量时要引用ShareMem。
delphi中的string类型很强大,我们知道普通的字符串长度最大为256个字符,但delphi中string类型在默认情况下长度可以达到2G。(对,您没有看错,确实是两兆。)这时,如果您坚持要使用string类型的参数、变量甚至是记录信息时,就要引用ShareMem单元,而且必须是第一个引用的。既在uses语句后是第一个引用的单元。如下例:
uses
ShareMem,
SysUtils,
Classes;
还有一点,在您的工程文件(*.dpr)中而不是单元文件(*.pas)中也要做同样的工作,这一点delphi自带的帮助文件没有说清楚,造成了很多误会。不这样做的话,您很有可能付出死机的代价。避免使用string类型的方法是将string类型的参数、变量等声明为Pchar或ShortString(如:s:string[10])类型。同样的问题会出现在当您使用了动态数组时,解决的方法同上所述。
Delphi DLL动态链库编写教程
Windows的发展要求允许同时运行的几个程序共享一组函数的单一拷贝。动态链接库就是在这种情况下出现的。动态链接库不用重复编译或链接,一旦装入内存,Dlls函数可以被系统中的任何正在运行的应用程序软件所使用,而不必再将DLLs函数的另一拷贝装入内存。 任何应用程序都可以共享由装入内存的DLLs管理的内存资源块。只包含共享数据的DLLs称为资源文件。
1.一般工程文件的头标用program关键字,而DLLs工程文件头标用library 关键字。不同的关键字通知编译器生成不同的可执行文件。用program关键字生成的是.exe文件,而用library关键字生成的是.dll文件;
2.假如DLLs要输出供其它应用程序使用的函数或过程,则必须将这些函数或过程列在exports子句中。而这些函数或过程本身必须用export编译指令进行编译。
根据DLLs完成的功能,我们把DLLs分为如下的三类:
1.完成一般功能的DLLs;2.用于数据交换的DLLs;3.用于窗体重用的DLLs。
一 Dll的制作一般分为以下几步:
1 在一个DLL工程里写一个过程或函数
2 写一个Exports关键字,在其下写过程的名称。不用写参数和调用后缀。
二 参数传递
1 参数类型最好与window C++的参数类型一致。最好少用DELPHI的数据类型。
2 最好有返回值[即使是一个过程],来报出调用成功或失败,或状态。成功或失败的返回值最好为1[成功]或0[失败].一句话,与windows c++兼容。
3 用stdcall声明后缀。
4 最好大小写敏感。
5 无须用far调用后缀,那只是为了与windows 16位程序兼容。
三 DLL的初始化和退出清理[如果需要初始化和退出清理]
1 DLLProc[SysUtils单元的一个Pointer]是DLL的入口。在此你可用你的函数替换了它的入口。但你的函数必须符合以下要求[其实就是一个回调函数]。如下:
procedurefar;stdcall;
dwReason参数有四种类型:
DLL_PROCESS_ATTACH:进程进入时 DLL_PROCESS_DETACH进程退出时
DLL_THREAD_ATTACH 线程进入时 DLL_THREAD_DETACH 线程退出时
在初始化部分写:
DLLProc := @DLLEnterPoint;
DllEnterPoint(DLL_PROCESS_ATTACH);
2 如Form上有TdcomConnection组件,就Uses Activex,在初始化时写一句CoInitialize (nil);
3 在退出时一定保证DcomConnection.Connected := False,并且数据集已关闭。否则报地址错。
四 全局变量的使用
在widnows 32位程序中,两个应用程序的地址空间是相互没有联系的。虽然DLL在内存中是一份,但变量是在各进程的地址空间中,因此你不能借助dll的全局变量来达到两个应用程序间的数据传递,除非你用内存映像文件。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页
- 上一篇:流量计算机
《如何用Delphi编写dll文件》相关文章
- › 如何用Delphi编写dll文件
- 在百度中搜索相关文章:如何用Delphi编写dll文件
- 在谷歌中搜索相关文章:如何用Delphi编写dll文件
- 在soso中搜索相关文章:如何用Delphi编写dll文件
- 在搜狗中搜索相关文章:如何用Delphi编写dll文件