用Delphi 制作DLL
一 Dll 的制作一般步骤
二 参数传递
三 DLL 的初始化和退出清理[如果需要初始化和退出清理]
四 全局变量的使用
五 调用静态载入
六 调用动态载入
七 在DLL 建立一个TForM
八 在DLL 中建立一个TMDIChildForM
九 示例:
十 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,并且数据集已关闭。否则报地
址错。
四 全局变量的使用
在widnows 32 位程序中,两个应用程序的地址空间是相互没有联系的。虽然DLL 在内存中
是一份,但变量是在各进程的地址空间中,因此你不能借助dll 的全局 |
|