a class named TXXX already exists,求解!


  问题来源如下:有一个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'))
这一句就会出错了

因为其中有一个类未注册

 

期待高手为人解惑。。




免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM