Тип TMessage не является определенным классом с образцом построителя виртуальной функции C ++ - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь использовать образец embarcadero при использовании камеры Android и получаю сообщение об ошибке:

«тип 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 голосов
/ 15 января 2019

В Delphi TMessage работает нормально, но в C ++ Builder вы должны использовать TMessageBase вместо:

void __fastcall TForm1::DoMessageListener(const TObject *Sender, TMessageBase const *M)

Это четко указано в документации:

Отправка и получение сообщений с использованием 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.

Это использование TMessageBase также продемонстрировано в документации System.Messaging (C ++) пример.

...