问题来源如下:有一个EXE和两个DLL,用到同一个公共单元:
unit UnitBpl;
interface
uses Classes;
type
TBaseClass= class of TBase;
TBase=class(TPersistent)
public
procedure show;virtual;
end;
implementation
{ TBase }
procedure TBase.show;
begin
end;
end.
在DLL_1中:
Type
TMy1=class(TBase)
public
procedure Show;override;
end;
implementation
procedure TMy1.Show;
begin
inherited;
ShowMessage('我是TMy1');
end;
initialization
RegisterClass(TMy1);
finalization
UnregisterClass(TMy1);
DLL_2中:
Type
TMy2=class(TBase)
public
procedure Show;override;
end;
implementation
procedure TMy2.Show;
begin
inherited;
ShowMessage('我是TMy2222');
end;
initialization
RegisterClass(TMy2);
finalization
UnregisterClass(TMy2);
EXE中:
procedure TFrmMain.btn1Click(Sender: TObject);
var
myObj:TBase;
BaseClass:TBaseClass;
begin
BaseClass:=TBaseClass(FindClass('TMy2'));//TBaseClass(FindClass('TMy1'));
myObj:=BaseClass.Create;
myObj.show;
end;
目的很明显了,就是想从dll_1和dll_2 中导出相同父类的不同子类,但是在loadLibary的时候,会提示如下图:
提示名为TBase的类已经存在!!!为什么呢?
RegisterClass(TMy2);
RegisterClass(TMy1);
没有注册TBase类啊?
如果注释掉其中一句RegisterClass,则哥运行,当然,
BaseClass:=TBaseClass(FindClass('TMy2'))
这一句就会出错了
因为其中有一个类未注册
期待高手为人解惑。。