我正在尝试在使用Android相机时使用embarcadero示例并收到错误消息:
“类型TMessage不是带有虚拟功能的已定义类”在线:
void __fastcall TForm1::DoMessageListener(const TObject *Sender, TMessage const *M) {
TMessageDidFinishTakingImageFromLibrary const *v = dynamic_cast<TMessageDidFinishTakingImageFromLibrary const *>(M);
if (v) {
Image1->Bitmap->Assign(v->Value);
}
}
答案 0 :(得分:0)
在Delphi中,TMessage
可以正常工作,但是在C ++ Builder中,您必须使用TMessageBase
来代替:
void __fastcall TForm1::DoMessageListener(const TObject *Sender, TMessageBase const *M)
文档中对此进行了明确说明:
Sending and Receiving Messages Using the RTL:
RTL仅定义一种消息类型
TMessage
。实际上,它是一个模板,可用于为特定类型的值创建消息。例如:TMessage<int>
或TMessage<UnicodeString>
。您还可以继承TMessage
的子类来定义自己的消息类型,或者,如果您使用的是FireMonkey,则可以重用框架定义的消息类型。注意:对于C ++项目,请使用
TMessageBase
而不是TMessage
。
TMessage
表示用于消息目的的基类。可以继承它以发送自定义消息。警告:对于C ++项目,请改用
TMessageBase
。
将
System.Messaging.TMessageBase
用于C ++项目,而不是System.Messaging.TMessage
。
在文档的System.Messaging (C++)示例中也演示了TMessageBase
的这种用法。