为什么我不能将resourcestring用作常量?

时间:2011-12-10 14:41:53

标签: delphi delphi-2007

我从http://embtvstools.svn.sourceforge.net/

下载了embtvstools(Embarcadero TVirtualShellTools)

然而,当我创建一个新包时,删除.pas文件(以及从VirtualTreeView中删除compilers.inc并编译该批次,我收到错误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,
    .....
  

[Pascal Error] IDEVirtualResources.pas(155):E2026预期的常量表达式
  [Pascal Error] IDEVirtualResources.pas(156):E2026预期的常量表达式   [Pascal Error] IDEVirtualResources.pas(157):E2026期望的常量表达式

更新
widestring更改为string会阻止编译器抱怨,(我怀疑它会在其他地方创建一些问题,因为widestring<> string)我想保留widestring类型的常量

1 个答案:

答案 0 :(得分:4)

正如Uwe在评论中指出的,在Unicode版本的Delphi中resourcestring的类型为WideString。但是你使用的是Unicode前Delphi,因此resourcestring只是AnsiString。这解释了编译错误。

如何继续取决于您尝试做什么。如果您打算将这些字符串翻译成不同的语言,那么您可能处于绑定状态。如果您打算这样做,那么使用Unicode版本的Delphi显然会好得多。

所以,既然你坚持使用Unicode之前的Delphi,我猜你实际上并不需要翻译字符串。在这种情况下,只需将const数组的声明从WideString更改为string。碰巧的是,这个数组是由这段代码声明的,但从未引用过。