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