2017-01-01 64 views
-2

在Delphi FMX如何調用德爾福FMX工廠方法從C++ Builder中

TStyledPresentation = class(TStyledControl) 

方法定義爲:

function GetModel<T: TDataModel>: T; 

和C++ HPP文件:

template<typename T> T __fastcall GetModel(void); 

Implimented如:

function TStyledPresentation.GetModel<T>: T; 
begin 
Result := FModel as T; 
end; 

當重寫後,允許它在TEDIT做如下返回定製型號:

function TCustomEdit.GetModel: TCustomEditModel; 
begin 
Result := GetModel<TCustomEditModel>; 
end; 

我有超過C++ Builder中纏身這在我的.h文件:

HIDESBASE TAltorFMXEditModel* __fastcall GetModel(void)/* overload */; 

而且Implimented它在.cpp文件中爲:

TAltorFMXEditModel * __fastcall TAltorFMXEdit::GetModel(void) 
{ 
return GetModel<TAltorFMXEditModel>; 
} 

但是,這並不構建或工作。

有人可以告訴我如何從C++ Builder中正確調用Delphi工廠方法嗎?

+1

如果它*沒有構建*,那麼顯然它不會工作,並且您收到錯誤消息。那個錯誤信息是什麼?它出現在你面前的屏幕上,你絕對沒有理由不把它包含在你的文章中,所以我們也有這些信息。 –

回答

1

您寫道:

return GetModel<TAltorFMXEditModel>; 

但當其實你需要調用的函數,並通過其返回值此方法返回的功能:

return GetModel<TAltorFMXEditModel>(); 

德爾福語法允許你省略函數在某些情況下調用parens,但C++語法不允許這樣做。

我希望C++編譯器會報告一條錯誤消息,指出這一點。

+0

謝謝大衛。我試過 return GetModel (); 結果: [bcc32c錯誤] AltorFMXEdit.cpp(56): 'TAltorFMXEditModel' 並不是指一個值 嘗試: 返回GetModel <__的classid(TAltorFMXEditModel)>(); 結果 [bcc32c錯誤] AltorFMXEdit.cpp(57):無效的操作數的二進制表達式( 'TAltorFMXEditModel *(__閉合*)()__attribute __((FASTCALL))' 和 'TClass'(又名「系統:: TMetaClass * ')) 這會讓我們更接近嗎? –

+0

@David:我想這就是爲什麼它不能構建。

+0

@Alan:它看起來好像編譯器不知道「TAltorFMXEditModel」應該是什麼。你有沒有包含必要的頭文件? –