美好的一天。我在Embarcadero Xe8中使用C ++ Builder编写。我在Ios和android上做移动应用程序项目并面临这样的问题:我无法抓住手机锁屏事件。我以前一直这样做:
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):无法初始化类型' TApplicationEventHandler' (aka' bool( closure *)(Fmx :: Platform :: TApplicationEvent,System :: TObject __borland_class * __ strong)__ attribute ((pcs(" aapcs-vfp" )))')左值类型' bool(__closure *)(Fmx :: Platform :: TApplicationEvent,System :: TObject __borland_class * __ strong)' FMX.Platform.hpp(252):将参数传递给参数' AEventHandler'这里
我不知道还有什么可以做的!你能帮我吗?
答案 0 :(得分:0)
您的HandleApp()
方法缺少__fastcall
调用约定:
bool __fastcall TForm1::HandleApp(TApplicationEvent a, TObject *x)
另外,您对SetApplicationEventHandler()
的呼吁需要改为:
a->SetApplicationEventHandler(&HandleApp);
这很重要,因为事件处理程序是__closure
,因此它在其中包含两个指针 - 指向要调用的类方法的指针,以及指向调用该方法的对象实例的指针(方法的this
值。当您仅按类名传递处理程序时,编译器不知道要对哪个对象实例进行操作,因此无法填充__closure
。上面的语法允许编译器看到HandleApp
应与Form1
对象关联。