关于Delphi中DLL封装对象的几种方法整理及体会
原文参见: http://blog.csdn.net/ingener/archive/2007/12/22/1958535.aspx
关于Delphi中DLL封装对象的几种方法整理及体会
Delphi用DLL来封装对象的技术主要有三种:
用接口实现
用纯虚和抽象类方法实现
用类引用实现
前两种,都是在DLL中生成类实例;第3种通过在调用方生成实例。三种方法的共同局限如下:
调用方只能调用封装类中的virtual方法;
调用方和提供方都必须提供类的描述,接口实现中需要提供接口描述(COM方法例外);
不能创建DLL包含对象的派生类(接口派生除外)。
首先,用接口实现当然包括COM实现,不过由于COM是一种实现接口技术的独立门类,所以在下面说的接口实现中不包括这方面的东西。其次用纯虚和抽象类方法实现,在《Delphi 6 Developer‘s Guide》中提及的inc文件作为公用的头文件,和刘艺在《Delphi面向对象编程思想》中提及的方法本质上是一样的。无非都是为了在调用方加入abstract关键字,而无需方法实现,从而使得编译通过。inc文件的方法是利用宏指令来达到统一处理,不用inc方法是在两处都需要进行描述。
下面用一个例子来展示所以上面提到的集中方法。
调用方主要文件列表为:
UnitMain.pas 调用DLL的界面
UnitPublic.pas 第二种方法在调用端的类描述文件
UnitIDest.pas 接口方法和类引用方法的类描述文件
IncDemo.inc 利用inc文件实现的类描述文件
DLL工程主要文件列表为:
ProDLLDemo.dpr DLL工程文件
UnitDLLDemo.pas 所有类实现部分的文件
UnitIDest.pas 接口方法和类引用方法的类描述文件
IncDemo.inc 利用inc文件实现的类描述文件
在方法的归纳上如有遗漏,有请指教。
UnitMain.pas 源代码:
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, UnitPublic, UnitIDest;
{$I IncDemo.inc}
// 用于Inc方法的宏指令,如果不是用该方法可去掉上面那行
type
TfmMain = class(TForm)
Memo1: TMemo;
btnUseAbstract: TButton;
btnUseReference: TButton;
btnUseInterface: TButton;
btnUseInc: TButton;
procedure btnUseAbstractClick(Sender: TObject);
proce
相关文档:
delphi dll 实例 与 dll窗体实例
本动态链接库方法有
Min,Max,SynAPP,ShowForm,showmyform
dll工程文件
Library Project1;
uses
dllUnit1 in 'dllUnit1.pas' {Form1};
function Min(X, Y: Integer): Integer; export;
begin
if X < Y then Min := X else Min := Y;
end;
function Max(X, Y: Integer): ......
dll 调用方法有 静态调用和动态调用两种方法
用到的dll为上篇文章所编写的dll.
总结如下:
Unit Unit1;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
Type
TForm1 = Class(TForm)
Button1: TButton; ......
delphi 注册 com 对象的方法
procedure TForm1.Button3Click(Sender: TObject);
var
Sd: TSecurityDescriptor;
begin
InitializeSecurityDescriptor(@Sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(@Sd, true, Nil, false);
RegSe ......
Delphi中Format字符串说明
function Format(const Format: string; const Args: array of const):
string;
Format字符串说明:
"%" [index ":"] ["-"] [width] ["." prec] type
(1)
格式化字符串必须以%开头
(2) [index ":"]
索引指的是Args参数列表中要显示的每一项的序号。比如:Args是
......