2011-12-10 4 views
4

내가로부터 embtvstools (엠바 카데로 TVirtualShellTools) 다운로드 한 : 나는 새 패키지를 만들 때 http://embtvstools.svn.sourceforge.net/resourcestring을 상수로 사용할 수없는 이유는 무엇입니까?

그러나, 을 파일를 .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, 
    ..... 

[파스칼 오류] IDEVirtualResources.pas는 (155) : E2026 상수 식
[파스칼 오류] IDEVirtualResources 예상 : E2026 정수 표현은
[파스칼 오류] IDEVirtualResources.pas (156)가 예상. PAS (157) : E2026 상수 표현은

업데이트
가변경 예상에서 string까지 나는 컴파일러가 불평을 멈추게합니다. (widestring <> 문자열이기 때문에 다른 문제가 생길 것 같습니다) widestring 상수를 유지하고 싶습니다.

+2

이 코드는 resourcestrings이 WideString 인 D2009 +에 대한 것일 수 있습니다. –

+1

D2009와 D2010은이 점에 대해 불평하지 않습니다. 유니 코드와 관련이있을 수 있습니다. WideString은 모두 Windows Managed UTF-16LE 문자열입니다. D2009 이전의 resourcestrings은 AnsiStrings입니다. –

+0

나는 'WideString'의 타입 상수를 가질 수 있다는 것이 놀랍다 고 말하고 싶습니다. COM 할당자를 런타임에 할당 한 실제 WideString입니까? 아니면 null로 끝나는 WideChar 배열에 대한 포인터입니까? –

답변

4

Uwe가 주석에서 지적한 것처럼 델파이의 유니 코드 버전에서 resourcestringWideString입니다. 하지만 유니 코드 이전 델파이를 사용하고 있으므로 resourcestring은 간단히 AnsiString입니다. 이것은 컴파일 오류를 설명합니다.

진행 방법은 수행하려는 작업에 따라 다릅니다. 이 문자열을 다른 언어로 번역하려는 경우 바인드 상태 일 수 있습니다. 그렇게하기를 원한다면 유니 코드 버전의 Delphi를 사용하는 것이 훨씬 낫습니다.

그래서 유니 코드 사전 델파이를 사용하고 있기 때문에 문자열을 실제로 번역 할 필요는 없습니다. 어떤 경우에는 const 배열의 선언을 WideString에서 string으로 변경하십시오. 이 배열은이 코드에 의해 선언되지만 한번도 참조되지 않습니다.

관련 문제