TMessage类型不是使用虚函数C ++构建器示例定义的类

时间:2019-01-14 13:39:14

标签: c++builder

我正在尝试在使用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);
    }
}   

1 个答案:

答案 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

System.Messaging.TMessage

  

TMessage表示用于消息目的的基类。可以继承它以发送自定义消息。

     

警告:对于C ++项目,请改用TMessageBase

System.Messaging.TMessageBase

  

别名为System.Messaging.TMessage

     

System.Messaging.TMessageBase用于C ++项目,而不是System.Messaging.TMessage

在文档的System.Messaging (C++)示例中也演示了TMessageBase的这种用法。