- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)