Delphi下写DLL大全分析和总结.docx

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

转一篇Delphi

转一篇Delphi下写DLL的文章

Delphi制作DLL

—Dll的制作一般步骤二参数传递

三DLL的初始化和退出清理[如果需要初始化和退出清理]四全局变量的使用

五调用静态载入六调用动态载入

七在DLL建立一个TForM

八在DLL中建立一个TMDIChildForM

九示例:

十Delphi制作的Dll与其他语言的混合编程中常遇问题:十一相关资料

—Dll的制作一般分为以下几步:

在一个DLL工程里写一个过程或函数

写一个Exports关键字,在其下写过程的名称。不用写参数和调用后缀。二参数传递

参数类型最好与windowC++的参数类型一致。不要用DELPHI的数据类型。

最好有返回值[即使是一个过程],来报出调用成功或失败,或状态。成功或失败的返回值最好为1[成功]或0[失败].一句话,与windowsc++兼容。

用stdcall声明后缀。

最好大小写敏感。

无须用far调用后缀,那只是为了与windows16位程序兼容。

三DLL的初始化和退出清理[如果需要初始化和退出清理]

DLLProc[SysUtils单元的一个Pointer]是DLL的入口。在此你可用你的函数替换了它的入口。但你的函数必须符合以下要求[其实就是一个回调函数]。如下:

procedureDllEnterPoint(dwReason:DWORD);far;stdcall;

dwReason参数有四种类型:DLL_PROCESS_ATTACH:进程进入时DLL_PROCESS_DETACH:进程退出时

DLL_THREAD_ATTACH:线程进入时DLL_THREAD_DETACH:线程退出时在初始化部分写:

DLLProc:=@DLLEnterPoint;

DllEnterPoint(DLL_PROCESS_ATTACH);

如Form上有TdcomConnection组件,就UsesActivex,在初始化时写一句CoInitialize(nil);

在退出时一定保证DcomConnection.Connected:=False,并且数据集已关闭。否则报地址错。

四全局变量的使用

在widnows32位程序中,两个应用程序的地址空间是相互没有联系的。虽然DLL在内存中是一份,但变量是在各进程的地址空间中,因此你不能借助dll的全局变量来达到两个应用程序间的数据传递,除非你用内存映像文件。

五调用静态载入

1客户端函数声名:

大小写敏感。

与DLL中的声明一样。

如:showform(form:Tform);Far;externalyproject_dll.dll;3)调用时传过去的参数类型最好也与windowsc++一样。

4)调用时DLL必须在windows搜索路径中,顺序是:当前目录;Path路径;

windows;widows\system;windows\ssystem32;

六调用动态载入

1建立一种过程类型(或者是一个Function)[如果你对过程类型的变量只是一个指针的本质清楚的话,你就知道是怎么回事了]。如:

type

mypointer=procedure(form:Tform);Far;external;

//mypointer=function(form:Tform);Far;external;var

Hinst:Thandle;showform:mypointer;

begin

Hinst:=loadlibrary(yproject_dll);//Load一个Dll,按文件名找。showform:=getprocaddress(Hinst,showform);//按函数名找,大小写敏感。如果你

知道自动化对象的本质就清楚了。showform(application.mainform);//找到函数入口指针就调用。Freelibrary(Hinst);

end;

七在DLL建立一个TForM

1把你的FormUses到Dll中,你的Form用到的关联的单元也要Uses进来[这是最麻烦

的一点,因为你的Form或许Uses了许多特殊的单元或函数]2传递一个Application参数,用它建立Form.

八在DLL中建立一个TMDIChildForM

1Dll中的MDIForm.FormStyle不用为fmMDIChild.2在CreateForm后写以下两句:

functionShowForm(

文档评论(0)

dqy118 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体上海海滋实业有限公司
IP属地上海
统一社会信用代码/组织机构代码
91310115MA7DL1JF2N

1亿VIP精品文档

相关文档