Вероятно, существуют уже существующие операторы #define
для MN_SETHMENU
и MN_GETHMENU
в другом заголовочном файле C / C ++, который находится в области видимости, например:
#define MN_SETHMENU 0x01E0
#define MN_GETHMENU 0x01E1
Если это так, это может помешатьс объявлениями, сгенерированными в Vcl.Styles.Utils.Menus.hpp
, заставляя компилятор видеть их как:
static const System::Word 0x01E0 = System::Word(0x1e0);
static const System::Word 0x01E1 = System::Word(0x1e1);
Что явно неверно, и, следовательно, ошибки.
В Vcl.Styles.Utils.Menus.pas
(и в .pas
файлы в целом), объявления для MN_SETHMENU
и MN_GETHMENU
(и все остальное, что уже предопределено в заголовках C / C ++) должны быть помечены директивой {$EXTERNALSYM ...}
, чтобы онине объявляются повторно в сгенерированном файле .hpp
, например:
{$EXTERNALSYM MN_SETHMENU} // <-- add this
MN_SETHMENU = $01E0;
{$EXTERNALSYM MN_GETHMENU} // <-- add this
MN_GETHMENU = $01E1;
При необходимости используйте директиву {$HPPEMIT '...'}
, чтобы добавить подходящие операторы #include
в сгенерированный *Файл 1028 *, чтобы при необходимости он мог извлекать другие заголовочные файлы C / C ++, например:
{$HPPEMIT '#include <OtherFile.h>'}