Welcome

首页 / 软件开发 / Delphi / Delphi从Dll中导出类

Delphi从Dll中导出类2010-11-27Musicwind从Dll中导出类 ,想必大家首先想到的是使用 bpl 包。这种方式有一个不好 ,那就是使用者必须清楚这个包中含有那些类 ,也就是说必须知道类的名字 -- 这在一定意义上是个限制 ,试想一种情况 ,使用者定义了一个底层的抽象类 (abstract class),然后在此基础上定义了许多应用类 (concrete class),那么 ,对于使用者来说 ,他希望在不知道具体有哪些类的情况下能使用这些类 -- 这 么说似乎有些玄 ,但实际情况确实如此 ,因为定义抽象类的时候并不能预料到以 后会有多少个具体类 -- 那么这样的需求 ,要靠什么样的技术来实现呢?

其实实现的技术的难度并不大 -- 作者在此将自己实践的经验献给大家 ,算作抛砖引玉 ,希望能看到其他更好的方法!

以下先介绍该方法涉及的一些基础知识 ,然后用一个例子来说明具体的实现 。

一、基本概念

元类 (meta class),也叫类引用类型 (class-reference type),可以看成是 一种类的类型 ,以该类型声明的变量的值代表一个类。比如 : type

TClass = Class of TObject;

这样就声明了一个元类的类型。然后可以有这样的变量声明 :

Var

AClass: TClass;

那么 ,就可以有这样的用法 :

AClass := TObject;

或者 :

AClass := TButton;

或者 :

AClass := TForm;

等等。

因为 TClass 是一个 TObject 类型的元类 ,而 TButton,TForm 等都是自 TObject 派生而来 ,因而 TButton 和 TForm 这样的值对于 AClass 都是可接受 的。

然后 ,我们就可以运用多态的思想 ,灵活运用 AClass 这个类变量了。而这 一点也正是下文具体实现的基础知识。