2016-04-22 3 views
0

おやすみなさい。私はEmbarcadero Xe8のC++ Builderで書いています。私はイオスとアンドロイドでモバイルアプリケーションプロジェクトを行い、そのような問題に直面しました。電話ロック画面を捕らえることができません。私はいつもそうするために使用:キャッチロック画面イベント

bool TForm1::HandleApp(TApplicationEvent a, TObject *x) 
{ 
    if (a == TApplicationEvent::EnteredBackground) 
    { 
     MediaPlayer1->Stop(); 
    } 
    return true; 
} 
//--------------------------------------------------------------------------- 
void __fastcall TForm1::FormCreate(TObject *Sender) 
{ 
    _di_IFMXApplicationEventService a; 
    if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXApplicationEventService), &a)) 
    { 
    a->SetApplicationEventHandler(TForm1::HandleApp); 
    } 
} 

しかしエラー:

\Unit1.cpp(33): cannot initialize a parameter of type 'TApplicationEventHandler' (aka 'bool (closure *)(Fmx::Platform::TApplicationEvent, System::TObject __borland_class *__strong) __attribute((pcs("aapcs-vfp")))') with an lvalue of type 'bool (__closure *)(Fmx::Platform::TApplicationEvent, System::TObject __borland_class *__strong)' FMX.Platform.hpp(252): passing argument to parameter 'AEventHandler' here

私が何をしようとする他に何を知ってはいけません!手伝っていただけませんか?

+0

サイドノートでは、C++で 'OnCreate'イベントを使用すべきではありません。これは、C++で不正な動作を引き起こす可能性のあるDelphiのイディオムです。代わりにクラスコンストラクタをオーバーライドしてください( '__fastcall TForm1(TComponent *)')。 –

答えて

0

あなたHandleApp()方法は__fastcall呼び出し規約が欠落しています。

bool __fastcall TForm1::HandleApp(TApplicationEvent a, TObject *x) 

また、SetApplicationEventHandler()ニーズにお電話ではなく、このようになり:イベントハンドラがAであるため、

a->SetApplicationEventHandler(&HandleApp); 

これは重要です__closureなので、呼び出すクラスメソッドへのポインタと、メソッドが呼び出されたオブジェクトインスタンスへのポインタ(メソッドの3210の値)。ハンドラをクラス名のみで渡すと、コンパイラはどのオブジェクトインスタンスが処理されるかを知らないため、__closureに値を設定できません。上記の構文は、コンパイラがHandleAppForm1オブジェクトに関連付けられるべきであることを見ることを可能にする。

関連する問題