用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 的全局变量来达到两个应用程序间的数据传递,除非你用内存映像文件。 五 调用静态载入 1 客户端函数声名: 1)大小写敏感。 2)与 DLL 中的声明一样。 如: showform(form:Tform);Far;external'yproject_dll.dll'; 3)调用时传过去的参数类型最好也与 windows c++一样。 4) 调 用时 DLL 必 须 在 windows 搜 索 路 径 中 ,顺 序是 : 当 前 目 录 ...