Почему я не могу использовать строку ресурса как константу? - PullRequest
4 голосов
/ 10 декабря 2011

Я скачал embtvstools (Embarcadero TVirtualShellTools) из: http://embtvstools.svn.sourceforge.net/

Однако, когда я создаю новый пакет, отбросьте файлы .pas (и пропущенный compilers.inc из VirtualTreeView in) и скомпилировав лот, я получаю ошибку E2026, почему это так и как мне избежать / обойти это?

resourcestring
    sAssociationChanged = 'Association Changed';
    sItemCreate = 'Item Create';
    sItemDelete = 'Item Delete';
    ....

const
  // Literal translations of TShellNotifyEvent type.  Useful when using the
  // OnShellNotify event to print out what event occurred.  VirtualShellUtilities.pas
  // has a helper function ShellNotifyEventToStr that uses these.
  VET_NOTIFY_EVENTS: array[0..19] of WideString = (
    sAssociationChanged,
    sAttributes,
    sItemCreate,
    .....

[Ошибка Паскаля] IDEVirtualResources.pas (155): E2026 Ожидается постоянное выражение
[Ошибка Паскаля] IDEVirtualResources.pas (156): Ожидается постоянное выражение
[Ошибка Паскаля] IDEVirtualResources.pas (157): Ожидается постоянное выражение E2026

Обновление
Изменение widestring на string останавливает жалобу компилятора (я подозреваю, что это создаст проблему в другом месте, потому что строка widestring <>) Iхотел бы сохранить константу типа widestring.

1 Ответ

4 голосов
/ 11 декабря 2011

Как указывает Уве в комментариях, resourcestring в версиях Delphi для Unicode имеет тип WideString.Но вы используете pre-Unicode Delphi и поэтому resourcestring это просто AnsiString.Это объясняет ошибку компиляции.

Порядок действий зависит от того, что вы пытаетесь сделать.Если вы намереваетесь перевести эти строки на разные языки, вы можете быть в затруднении.Если вы собираетесь это сделать, то вам, очевидно, будет гораздо лучше с версией Delphi для Unicode.

Итак, поскольку вы придерживаетесь Delphi, предшествующей Unicode, я думаю, вам на самом деле не нужно переводитьструны.В этом случае просто измените объявление массива const с WideString на string.Как оказалось, этот массив объявлен этим кодом, но ни разу на него не ссылались.

...