资源简介
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的全局变量来达到两个应用程序间的数据
传递,除非你用内存映像文件。
五、其他:调用方式按照标准的Windows调用方式.
六、关于参数传递
•Delphi程序之间调用DLL,如果要用String类型的话,要在引用的单元加上ShareMem 单元。
•如果Delphi写的DLL供其他开发工具使用的话,不要使用String类型,用PAnsiChar类型。
尽量使用标准DLL接口。指的是传递的参数类型及函数返回类型不能是Delphi特有的,
比如string(AnsiString),以及动态数组和含有这些类型成员的复合类型(如记录),也不
能是包含有这些类型成员数据成员的对象类型,以避免可能的错误。如果使用了string类型或
动态数组类型,且调用方不是Delphi程序,则基本上会报错。如果调用方是Delphi但调用方或
被调用方没有在工程文件的第一包含单元不是ShareMem,也可能会出错。
七、关于回调Funciton
你可以把Callback函数看作是一种特殊的消息响应函数,一般来说我们不会自己调用这种函数,
而是有某些系统函数调用,而且不需要向后传递消息。 只要象C/C++这样支持函数指针的语言都
有回调函数的概念,它实际上是向被调用函数传一个你的函数地址,然后被调用函数向通过你传
入的函数地址来调用你的函数 。
以上是结构化回调,到高级语言Object Pascal、C++中回调函数并没有退出,反而得到延伸与
扩展,在面向对像中的回调,其实是指面向对像中类对像的事件,事件就是原始的回调函数。面
向对像, 将回调函数定义成事件过程,在程序引用对像时,若指定了对像的过程事件后,那么在
要进行事件触发的地方检查事件过程是否分配,如果分中的就执行事,也就是执行了回调函数。
•一 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的全局变量来达到两个应用程序间的数据
传递,除非你用内存映像文件。
五、其他:调用方式按照标准的Windows调用方式.
六、关于参数传递
•Delphi程序之间调用DLL,如果要用String类型的话,要在引用的单元加上ShareMem 单元。
•如果Delphi写的DLL供其他开发工具使用的话,不要使用String类型,用PAnsiChar类型。
尽量使用标准DLL接口。指的是传递的参数类型及函数返回类型不能是Delphi特有的,
比如string(AnsiString),以及动态数组和含有这些类型成员的复合类型(如记录),也不
能是包含有这些类型成员数据成员的对象类型,以避免可能的错误。如果使用了string类型或
动态数组类型,且调用方不是Delphi程序,则基本上会报错。如果调用方是Delphi但调用方或
被调用方没有在工程文件的第一包含单元不是ShareMem,也可能会出错。
七、关于回调Funciton
你可以把Callback函数看作是一种特殊的消息响应函数,一般来说我们不会自己调用这种函数,
而是有某些系统函数调用,而且不需要向后传递消息。 只要象C/C++这样支持函数指针的语言都
有回调函数的概念,它实际上是向被调用函数传一个你的函数地址,然后被调用函数向通过你传
入的函数地址来调用你的函数 。
以上是结构化回调,到高级语言Object Pascal、C++中回调函数并没有退出,反而得到延伸与
扩展,在面向对像中的回调,其实是指面向对像中类对像的事件,事件就是原始的回调函数。面
向对像, 将回调函数定义成事件过程,在程序引用对像时,若指定了对像的过程事件后,那么在
要进行事件触发的地方检查事件过程是否分配,如果分中的就执行事,也就是执行了回调函数。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 845 2007-01-20 13:31 Windows面向对像回调实例\GroupPObjCallBack.bpg
文件 434 2007-01-20 15:02 Windows面向对像回调实例\PObjCallBack.cfg
文件 2446 2007-01-20 15:02 Windows面向对像回调实例\PObjCallBack.dof
文件 3628 2007-01-20 14:56 Windows面向对像回调实例\PObjCallBack.dpr
文件 876 2007-01-20 11:55 Windows面向对像回调实例\PObjCallBack.res
文件 434 2007-01-20 13:30 Windows面向对像回调实例\PObjCallBackForm.cfg
文件 2446 2007-01-20 13:30 Windows面向对像回调实例\PObjCallBackForm.dof
文件 218 2007-01-20 13:30 Windows面向对像回调实例\PObjCallBackForm.dpr
文件 876 2007-01-20 13:30 Windows面向对像回调实例\PObjCallBackForm.res
文件 5818 2007-01-20 14:54 Windows面向对像回调实例\Unit_ObjCallBack.dcu
文件 1251 2007-01-20 14:55 Windows面向对像回调实例\Unit_ObjCallBack.dfm
文件 2900 2007-01-20 14:55 Windows面向对像回调实例\Unit_ObjCallBack.pas
目录 0 2007-01-20 15:02 Windows面向对像回调实例
文件 434 2007-01-20 11:23 Windows结构化回调实例\PWinCallBack.cfg
文件 2446 2007-01-20 11:23 Windows结构化回调实例\PWinCallBack.dof
文件 261 2007-01-20 11:23 Windows结构化回调实例\PWinCallBack.dpr
文件 876 2007-01-20 09:13 Windows结构化回调实例\PWinCallBack.res
文件 5572 2007-01-20 11:41 Windows结构化回调实例\Unit_WindowsCallBack.dcu
文件 1338 2007-01-20 11:39 Windows结构化回调实例\Unit_WindowsCallBack.dfm
文件 2351 2007-01-20 14:53 Windows结构化回调实例\Unit_WindowsCallBack.pas
文件 434 2007-01-20 11:33 Windows结构化回调实例\WindowsCallBack.cfg
文件 2446 2007-01-20 11:33 Windows结构化回调实例\WindowsCallBack.dof
文件 2099 2007-01-20 11:33 Windows结构化回调实例\WindowsCallBack.dpr
文件 876 2007-01-20 09:12 Windows结构化回调实例\WindowsCallBack.res
目录 0 2007-01-20 11:42 Windows结构化回调实例
----------- --------- ---------- ----- ----
41305 25
----------- --------- ---------- ----- ----
文件 845 2007-01-20 13:31 Windows面向对像回调实例\GroupPObjCallBack.bpg
文件 434 2007-01-20 15:02 Windows面向对像回调实例\PObjCallBack.cfg
文件 2446 2007-01-20 15:02 Windows面向对像回调实例\PObjCallBack.dof
文件 3628 2007-01-20 14:56 Windows面向对像回调实例\PObjCallBack.dpr
文件 876 2007-01-20 11:55 Windows面向对像回调实例\PObjCallBack.res
文件 434 2007-01-20 13:30 Windows面向对像回调实例\PObjCallBackForm.cfg
文件 2446 2007-01-20 13:30 Windows面向对像回调实例\PObjCallBackForm.dof
文件 218 2007-01-20 13:30 Windows面向对像回调实例\PObjCallBackForm.dpr
文件 876 2007-01-20 13:30 Windows面向对像回调实例\PObjCallBackForm.res
文件 5818 2007-01-20 14:54 Windows面向对像回调实例\Unit_ObjCallBack.dcu
文件 1251 2007-01-20 14:55 Windows面向对像回调实例\Unit_ObjCallBack.dfm
文件 2900 2007-01-20 14:55 Windows面向对像回调实例\Unit_ObjCallBack.pas
目录 0 2007-01-20 15:02 Windows面向对像回调实例
文件 434 2007-01-20 11:23 Windows结构化回调实例\PWinCallBack.cfg
文件 2446 2007-01-20 11:23 Windows结构化回调实例\PWinCallBack.dof
文件 261 2007-01-20 11:23 Windows结构化回调实例\PWinCallBack.dpr
文件 876 2007-01-20 09:13 Windows结构化回调实例\PWinCallBack.res
文件 5572 2007-01-20 11:41 Windows结构化回调实例\Unit_WindowsCallBack.dcu
文件 1338 2007-01-20 11:39 Windows结构化回调实例\Unit_WindowsCallBack.dfm
文件 2351 2007-01-20 14:53 Windows结构化回调实例\Unit_WindowsCallBack.pas
文件 434 2007-01-20 11:33 Windows结构化回调实例\WindowsCallBack.cfg
文件 2446 2007-01-20 11:33 Windows结构化回调实例\WindowsCallBack.dof
文件 2099 2007-01-20 11:33 Windows结构化回调实例\WindowsCallBack.dpr
文件 876 2007-01-20 09:12 Windows结构化回调实例\WindowsCallBack.res
目录 0 2007-01-20 11:42 Windows结构化回调实例
----------- --------- ---------- ----- ----
41305 25
- 上一篇:XXX市审计局审计信息管理系统介绍
- 下一篇:标准化题库考试系统
评论
共有 条评论