2017-01-01 27 views
-2

をデルファイFMXファクトリメソッドを呼び出す方法をはデルファイFMXではC++ Builderのから

TStyledPresentation = class(TStyledControl) 

方法は、次のように定義しますAs:

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

オーバーライドされた場合は、以下のようにそれはTEDITの場合と同様のカスタムモデルを返すことができます:

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

そしてImplimented:私は上のようにC++ Builderでの私の.hファイルでこれを乗ってきた

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

.cppファイルには次のように書かれています。

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

しかし、これは構築も機能もありません。

C++ BuilderからDelphiファクトリメソッドを正しく呼び出す方法を教えてもらえますか?

+1

* *をビルドしていない場合は、明らかに動作しません。エラーメッセージが表示されます。そのエラーメッセージは何ですか?それはあなたの目の前で画面に表示されています。あなたのポストにそれを含めることができない理由は全くありません。その情報もあります。 –

答えて

1

あなたが書いた:

return GetModel<TAltorFMXEditModel>; 

をしかし、実際に関数を呼び出すと、その戻り値を渡すために必要がある場合は、この機能を返します。

return GetModel<TAltorFMXEditModel>(); 

Delphiの構文は、省略することができますいくつかの状況では関数呼び出しは無効になりますが、C++の構文ではこれが許されません。

私はC++コンパイラがこれを示すエラーメッセージを報告していると思います。

+0

Davidありがとう。試しました return GetModel (); 結果: [bcc32cエラー] AltorFMXEdit.cpp(56): 'TAltorFMXEditModelは' が試み値を参照していない: リターンGetModel <__ CLASSID(TAltorFMXEditModel)>(); 結果 [bcc32cエラー] AltorFMXEdit.cpp(57):無効なバイナリ表現にオペランド( 'TAltorFMXEditModel *(__閉鎖*)()__attribute __((fastcall))' と 'はTClass'(別名「システム:: TMetaClass * ')) それは私たちをもっと近づけますか? –

+0

@David:私はそれが構築されない理由だと思います。

+0

@Alan:コンパイラは 'TAltorFMXEditModel'が何を想定しているかを知らないかのように見えます。必要なヘッダファイルをインクルードしましたか? –

関連する問題