- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Delphi下写DLL的文章
Delphi制作DLL
一 Dll的制作一般步骤
二 参数传递
三 DLL的初始化和退出清理[如果需要初始化和退出清理]
四 全局变量的使用
五 调用静态载入
六 调用动态载入
七 在DLL建立一个TFor
八 在DLL中建立一个TMDIChildFor
九 示例:
十 Delphi制作的Dll与其他语言的混合编程中常遇问题:
十一 相关资料
一 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的入口。在此你可用你的函数替换了它的入口。但你的函数必须符合以下要求[其实就是一个回调函数]。如下:
procedure DllEnterPoint(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组件,就Uses Activex,在初始化时写一句CoInitialize (nil);
3 在退出时一定保证DcomConnection.Connected := False,并且数据集已关闭。否则报地址错。
四 全局变量的使用
在idnows 32位程序中,两个应用程序的地址空间是相互没有联系的。虽然DLL在内存中是一份,但变量是在各进程的地址空间中,因此你不能借助dll的全局变量来达到两个应用程序间的数据传递,除非你用内存映像文件。
五 调用静态载入
1 客户端函数声名:
1)大小写敏感。
2)与DLL中的声明一样。
? ?如: showform(form:Tform);Far;externalyproject_dll.dll;
3)调用时传过去的参数类型最好也与indows C++一样。
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建立一个TFor
1 把你的Form Uses到Dll中,你的Form用到的关联的单元也要Uses进来[这是最麻烦的一点,因为你的Form或许Uses了许多特殊的单元或函数]
2 传递一个Application参数,用它建立Form.
八 在DLL中建立一个TMDIChildForM
1 Dll中的MDIForm.FormStyle不用为fmMDIChild.
2 在CreateForm后写以下两句:
function ShowForm(mainForm:TForm):integer;stdcall
var
? Form1: TForm1
您可能关注的文档
最近下载
- 岛津原子吸收分光光度计AA-6300软件硬件基本操作AA-6300-rj手册说明书.pdf VIP
- The Magic of Ordinary Days《平凡岁月的魅力(2005)》完整中英文对照剧本.docx VIP
- 注册税务师备考课件.pptx VIP
- MECG1000心电图机培训.pptx VIP
- 国内外CO2催化转化技术发展现状与未来展望.docx VIP
- 道路运输企业双重预防机制建设资料(安全风险分级管控和隐患排查治理).pdf
- HG∕T 5421-2018 噻唑膦原药(可复制版).pdf
- 括号里最大能填几326题.pdf VIP
- 公司物业服务投标方案(技术方案).docx VIP
- 实验动物学学堂云学堂在线课后题答案.docx VIP
文档评论(0)