delphi下写dll大全

delphi下写dll大全

ID:10868179

大小:53.50 KB

页数:27页

时间:2018-07-08

delphi下写dll大全_第1页
delphi下写dll大全_第2页
delphi下写dll大全_第3页
delphi下写dll大全_第4页
delphi下写dll大全_第5页
资源描述:

《delphi下写dll大全》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、转一篇Delphi下写DLL的文章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的入口。在此你可用你的函数替换了它的入口。但你的函数必须符合以下要求[其实就是一个回调函数]。如下:procedureDllEnter

3、Point(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上有TdcomConnection组件,就UsesActivex,在初始化时写一句CoInitialize

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

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

6、ternal;var Hinst:Thandle; showform:mypointer;begin  Hinst:=loadlibrary('yproject_dll');//Load一个Dll,按文件名找。  showform:=getprocaddress(Hinst,'showform');//按函数名找,大小写敏感。如果你知道自动化对象的本质就清楚了。 showform(application.mainform);//找到函数入口指针就调用。 Freelibrary(Hinst);end;七在DLL建立一个TForM1把你的F

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

8、pplication.MainForm);//先把dll的MainForm句柄保存起来,也无须释放,只不过是替换一下 ptr^:=LongInt(mainForm);//用主调程序的mainForm替换DL

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

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

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