2016-07-11 3 views
-3

Delphi를 처음 사용하며 Inno Setup의 소스 코드를 Delphi 10.1 Berlin로 사용하여 Inno Setup의 Setup.e32 파일을 컴파일하려고했습니다.컴파일 오류 : [dcc32 오류] E2064 왼쪽면을 할당 할 수 없습니다.

하지만, 나는이 문제를 해결하고 해당 오류에 대한 질문이 사이트에 질문을 읽을 수는 있지만 심지어 방법을 모른다 [dcc32 Error] uPSUtils.pas(944): E2064 Left side cannot be assigned to.

오류를 받고 계속 컴파일 할 때 문제입니다 이 코드에서 무엇이 잘못되었는지를 판단 할 수 없습니다. 코드의

부분은 :

function FastUpperCase(const s: String): string; 
{Fast uppercase} 
var 
    I: Integer; 
    C: Char; 
begin 
    Result := S; 
    I := Length(Result); 
    while I > 0 do 
    begin 
    C := Result[I]; 
    if c in [#97..#122] then 
     Dec (Byte(Result[I]), 32); <<<Error E2064 HERE>>> 
    Dec(I); 
    end; 
end; 

function FastLowerCase(const s: String): string; 
{Fast lowercase} 
var 
    I: Integer; 
    C: Char; 
begin 
    Result := S; 
    I := Length(Result); 
    while I > 0 do 
    begin 
    C := Result[I]; 
    if C in [#65..#90] then 
     Inc(Byte(Result[I]), 32); <<<ERROR E2064 HERE>>> 
    Dec(I); 
    end; 
end; 

function ParseToken(var CurrTokenPos, CurrTokenLen: Cardinal; var CurrTokenId: TPSPasToken): TPSParserErrorKind; 
    {Parse the token} 
    var 
    ct, ci: Cardinal; 
    hs: Boolean; 
    p: PChar; 
    begin 
    ParseToken := iNoError; 
    ct := CurrTokenPos; 
    case FText[ct] of 
     #0: 
     begin 
      CurrTokenId := CSTI_EOF; 
      CurrTokenLen := 0; 
     end; 
     'A'..'Z', 'a'..'z', '_': 
     begin 
      ci := ct + 1; 
      while (FText[ci] in ['_', '0'..'9', 'a'..'z', 'A'..'Z']) do begin 
      Inc(ci); 
      end; 
       CurrTokenLen := ci - ct; 

      FLastUpToken := GetToken(CurrTokenPos, CurrtokenLen); 
      p := pchar(FLastUpToken); 
      while p^<>#0 do 
      begin 
      if p^ in [#97..#122] then 
       Dec ((Byte(p^)), 32); <<<ERROR E2064 HERE>>> 
      inc(p); 
      end; 
      if not CheckReserved(FLastUpToken, CurrTokenId) then 
      begin 
      CurrTokenId := CSTI_Identifier; 
      end; 
     end; 

이 코드에 문제가 있습니까?

내가 을 작성한 후 비 유니 코드 Inno 설정 컴파일 (현재 델파이 7을 설치 했으므로 .............)이 문제가 발생했습니다.

This is what happened after following instructions...........

답변

3

Char이 코드는 8 비트 AnsiChar의 별칭 델파이 미리 유니 코드 버전을 기록한다. Byte의 캐스트는이를 반영합니다. Delphi 2009 Char은 16 비트 WideChar에 앨리어싱되어 있습니다.

올바른 코드를 컴파일한다고 가정 할 때 (아래 참조), 해결책은 의도 된 컴파일러로이 코드를 컴파일하는 것입니다. 내용을 확인하려면 https://github.com/jrsoftware/issrc/blob/master/README.md 설명서를 참조하십시오. 필자가 읽은 것은 Delphi 7 또는 Delphi 2007에서 유니 코드가 아닌 버전의 Inno를 컴파일 할 수 있어야한다는 것입니다.

물론 유니 코드 버전을 컴파일하는 것이 더 쉽습니다. 다시 그렇게하기위한 지시 사항은 readme에 매우 명확하게 설명되어 있습니다.


의도 한 버전의 PascalScript 소스를 컴파일하지 않는다는 의견이 있습니다. 같은 이름의 파일을 다운로드했다고합니다. 그러지 마. Inno 저장소에서 링크 된 소스를 사용한다. 거기에서 권장되는 컴파일러를 사용하십시오. 당신은 Delphi 10.1을 가지고 있기 때문에 베를린은 Unicode Inno를 컴파일합니다.

소스 파일의 혼동으로 피클에 빠진 것처럼 보입니다. 내가 너라면 Inno 저장소에서 깨끗한 다운로드를 다시 시작하겠다.

  1. 기존 파일을 제거하십시오.
  2. Inno 저장소에서 최신 소스를 가져옵니다.
  3. readme의 지침에 따라 Inno의 유니 코드 버전을 컴파일하십시오.
+0

대단히 감사합니다 ........ 하드 검색 후이 파일을 다운로드하고 있습니다 :'CodeGearRADStudio2007_Dec2007.iso'.이 RAD Studio 2007을 사용하여 이것을 컴파일 할 수 있습니까? 델파이 2007이 이제는 끝났기 때문에이 파일의 내용을 확인할 수 없습니다. 단지 다운로드를 위해 다운로드합니다. :( – GTAVLover

+0

이 모듈 중 일부는 델파이가 더 낫다고 생각합니다. –

+0

아니면 이것을 중단하고 다운로드해야합니까? 이것은 'Delphi 2009 Update 3'링크와 같습니다 : http : //altd.embarcadero.com/download/Delphi_C++ Builder2009/Delphi_C++ Builder2009_ISO_June2009.iso JR Software가 이것을 의도 된 컴파일러라고 말하면서 이것이 작동해야한다고 생각합니다. – GTAVLover

2

읽어보기는 특히 이노의 유니 코드 버전이 있음 상태 :

  • 볼랜드 델파이를 설치

    유니 코드 이노 설치 프로그램 :

    우리는 모두 컴파일 Delphi 2009 Update 3의 Inno Setup 프로젝트.

    최신 델파이 버전도을 사용해야하지만 상당히 큰 파일로 이어질 것입니다. 윈도우 8.1에서 델파이 2009 IDE와 함께 작동하도록

    당신은 그것을 잘 작동되도록하려면이 두 가지가 필요합니다

    http://www.jrsoftware.org/files/Delphi_2007_2009_WOW64_Debugger_Fix.exe (md5sum이 : 545fc506c0614cf7a3339a7acb5217dc)

    http://www.jrsoftware.org/files/dzEditorLineEndsFix.exe (md5sum이 : c9598cf14452dd08987c5aec23d04f7d)

    합니다. ..

  • 빌딩

    모든 파일을 빌드하려면 build.bat를 실행하고 지시 사항을 따르십시오.

    은 비 유니 코드 이노 설정에 대한 유니 코드 이노 설정 또는 compile.bat에 대한 Inno Setup으로 실행 compile-unicode.bat를 컴파일하고 지침을 따르십시오.

    (10.1 베를린 포함)

나중에 델파이 2009을 사용하거나

, 당신은 이노의 유니 코드 버전이 아닌 안시 버전을 컴파일해야합니다.

코드의 번잡 라인 델파이의 유니 코드 버전과 호환 가능하도록 다시 쓸 수있는, 상기 되한다 :

if c in [#97..#122] then 
    Result[I] := Char(Ord(c) - 32); 
    // or: Dec(c, 32); Result[I] := c; 

if C in [#65..#90] then 
    Result[I] := Char(Ord(c) + 32); 
    // or: Inc(c, 32); Result[I] := c; 

if p^ in [#97..#122] then 
    Dec(p^, 32); 

그러나, 당신이 th를 사용한다면 이것은 필요하지 않습니다. e 올바른 유니 코드 사용 가능 버전의 코드.

+0

고맙습니다 .......... 그러나 Github에서 다운로드 한'uPSUtils.pas, uPSDebugger.pas, uPSRuntime.pas' 파일에는 Inno Setup의 소스 코드가 포함되어 있지 않습니다.'Setup .dproj' 소스 코드에서 Delphi는 'uPSUtils, uPSDebugger, uPSRuntime'을 찾지 못했습니다 ....... 그래서 PascalScript의 소스 코드에서이 세 가지 형식을 추가로 다운로드하여'Setup.dproj'에 추가했습니다. 이게 문제 야?유니 코드인지 아닌지는 몰랐습니다. – GTAVLover

+0

@remy 제안 된 다시 쓰기는 컴파일러 오류를 수정하지만 이제는 비 ASCII 데이터로 의미 론적으로 손상된 상태로 둡니다. –

+0

inno github 프로젝트는 파스칼 스크립트의 유니 코드 포트에 연결되므로 변경 작업을 제안하는 것은 정말로 나쁜 조언입니다. –

관련 문제