如何用delphi制作dll动态库方法

如何用delphi制作dll动态库方法

ID:1196431

大小:42.00 KB

页数:12页

时间:2017-11-08

如何用delphi制作dll动态库方法_第1页
如何用delphi制作dll动态库方法_第2页
如何用delphi制作dll动态库方法_第3页
如何用delphi制作dll动态库方法_第4页
如何用delphi制作dll动态库方法_第5页
资源描述:

《如何用delphi制作dll动态库方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、用Delphi制作DLL的方法一Dll的制作一般步骤二参数传递三DLL的初始化和退出清理[如果需要初始化和退出清理]四全局变量的使用五调用静态载入六调用动态载入七在DLL建立一个TForM八在DLL中建立一个TMDIChildForM九示例:十Delphi制作的Dll与其他语言的混合编程中常遇问题:十一相关资料一Dll的制作一般分为以下几步:1在一个DLL工程里写一个过程或函数2写一个Exports关键字,在其下写过程的名称。不用写参数和调用后缀。二参数传递1参数类型最好与windowC++的参数类

2、型一致。不要用DELPHI的数据类型。2最好有返回值[即使是一个过程],来报出调用成功或失败,或状态。成功或失败的返回值最好为1[成功]或0[失败].一句话,与windowsc++兼容。3用stdcall声明后缀。4最好大小写敏感。5无须用far调用后缀,那只是为了与windows16位程序兼容。三DLL的初始化和退出清理[如果需要初始化和退出清理]1DLLProc[SysUtils单元的一个Pointer]是DLL的入口。在此你可用你的函数替换了它的入口。但你的函数必须符合以下要求[其实就是一个回

3、调函数]。如下:procedureDllEnterPoint(dwReason:DWORD);far;stdcall;dwReason参数有四种类型:DLL_PROCESS_ATTACH:进程进入时DLL_PROCESS_DETACH进程退出时DLL_THREAD_ATTACH线程进入时DLL_THREAD_DETACH线程退出时在初始化部分写:DLLProc:=@DLLEnterPoint;DllEnterPoint(DLL_PROCESS_ATTACH);2如Form上有TdcomConnect

4、ion组件,就UsesActivex,在初始化时写一句CoInitialize(nil);3在退出时一定保证DcomConnection.Connected:=False,并且数据集已关闭。否则报地址错。四全局变量的使用在widnows32位程序中,两个应用程序的地址空间是相互没有联系的。虽然DLL在内存中是一份,但变量是在各进程的地址空间中,因此你不能借助dll的全局变量来达到两个应用程序间的数据传递,除非你用内存映像文件。五调用静态载入1客户端函数声名:1)大小写敏感。2)与DLL中的声明一样。

5、如:showform(form:Tform);Far;external'yproject_dll.dll';3)调用时传过去的参数类型最好也与windowsc++一样。4)调用时DLL必须在windows搜索路径中,顺序是:当前目录;Path路径;windows;widowssystem;windowsssystem32;六调用动态载入1建立一种过程类型[如果你对过程类型的变量只是一个指针的本质清楚的话,你就知道是怎么回事了]。如:typemypointer=procedure(form:Tfo

6、rm);Far;external;varHinst:Thandle;showform:mypointer;beginHinst:=loadlibrary('yproject_dll');//Load一个Dll,按文件名找。showform:=getprocaddress(Hinst,'showform');//按函数名找,大小写敏感。如果你知道自动化对象的本质就清楚了。showform(application.mainform);//找到函数入口指针就调用。Freelibrary(Hinst);en

7、d;七在DLL建立一个TForM1把你的FormUses到Dll中,你的Form用到的关联的单元也要Uses进来[这是最麻烦的一点,因为你的Form或许Uses了许多特殊的单元或函数]2传递一个Application参数,用它建立Form.八在DLL中建立一个TMDIChildForM1Dll中的MDIForm.FormStyle不用为fmMDIChild.2在CreateForm后写以下两句:functionShowForm(mainForm:TForm):integer;stdcallvarFo

8、rm1:TForm1;ptr:PLongInt;beginptr:=@(Application.MainForm);//先把dll的MainForm句柄保存起来,也无须释放,只不过是替换一下ptr^:=LongInt(mainForm);//用主调程序的mainForm替换DLL的MainForm。MainForm是特殊的WINDOW,它专门管理Application中的Forms资源.//为什么不直接Application.MainForm:=mainForm,因为

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。