关于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): ......
delphi 注册 com 对象的方法
procedure TForm1.Button3Click(Sender: TObject);
var
Sd: TSecurityDescriptor;
begin
InitializeSecurityDescriptor(@Sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(@Sd, true, Nil, false);
RegSe ......
Delphi in a Unicode World Part II: New RTL Features and
Classes to Support Unicode
By: Nick
Hodges
原文链接:http://dn.codegear.com/article/38498
Abstract: This article will cover the new features of the Tiburon
Runtime Library that will help handle Unicode strings.
//
& ......
问题背景:
公司希望使用Magento来进行接单,而后把订单导入到一个ERP系统中(订单处理引擎)。
问题:
在使用WebService从Magento中获取Payment信息时,信用卡是被加密的(法律规定不允许在数据库中存储信用卡的明文信息)!
......
很奇怪,昨天在编译程序的时候,出现过,iphist.dat 文件。每次执行都出现,仔细查看代码,什么也没有啊!后来在网站找到原因:
使用了IPWatch 控件的
一般产生这个文件是因为使用了indy的 TIdIPWatch 控件
该控件有个
ip历史的功能。
historyfilename指定的是保存ip历史记录的文件名,默认是iphist.Dat
......