2014-12-04 7 views
0

Delphi 2010에서 Delphi XE7로 프로그램을 업데이트하고 있습니다. 유니 코드 용으로 적응하고 GetFileVersionInfoSize 대신 GetFileVersionInfoW를 사용해야 할 필요가 있다고 생각하여 아래에 표시된 코드가 작동을 멈췄습니다.Delphi XE2 및 그 이후 버전의 파일 가져 오기

누가 아래에 표시된 기능의 최신 버전을 개발 한 사람이 있습니까? 지금까지 웹에서 예제를 찾을 수 없었습니다. 저의 저수준 Windows 프로그래밍이 저를 넘어서는 것이 아닌가 걱정됩니다.

도움 주셔서 감사합니다. 나중에 델파이 XE2와에 더 이상 작동 아래

기존 코드 : 그냥 델파이의 모든 버전에서 컴파일 할 때 1.0.0.0

procedure GetBuildInfo(var V1, V2, V3, V4: Word); 
{From Steve Schafer } 
var 
    VerInfoSize: DWORD; 
    VerInfo: pointer; 
    VerValueSize: DWORD; 
    VerValue: PVSFixedFileInfo; 
    Dummy: DWORD; 

begin 
    VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy); 
    GetMem(VerInfo, VerInfoSize); 
    GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo); 
    VerQueryValue(VerInfo, '\', pointer(VerValue), VerValueSize); 
    with VerValue^ do 
    begin 
     V1 := dwFileVersionMS shr 16; 
     V2 := dwFileVersionMS and $FFFF; 
     V3 := dwFileVersionLS shr 16; 
     V4 := dwFileVersionLS and $FFFF; 
    end; 
    FreeMem(VerInfo, VerInfoSize); 
end; 
+3

앱이 맞나요? 1.0.0.0 버전이 아닙니까? Btw. 확실히 오류 검사를 추가해야합니다. – TLama

+0

게시 한 코드가 XE6의 새로운 VCL 앱에서 완벽하게 작동합니다. 양식에 레이블을 드롭하고 프로젝트 옵션으로 이동하여 빌드의 버전 정보를 설정하고 FormShow에 대한 처리기를이 두 줄 (및 적절한 변수 선언)과 함께 추가합니다. GetBuildInfo (Major, Minor, Rev, Build); Label1.Caption : = 형식 ('% d. % d. % d. % d', [Major, Minor, Rev, Build]); 프로젝트 -> 빌드 (추가 된 버전 정보를 얻고 응용 프로그램을 실행하십시오. 내 경우 버전을 4.3.2.1로 설정하고 레이블은 '4.3.2.1'을 표시합니다. –

+1

코드는 모든 버전에서 똑같이 작동합니다 –

답변

3

당신의 코드가 완벽하게 잘 작동 반환합니다. 따라서 코드가 1.0.0.0의 버전을보고하는 유일한 이유는 버전이 1.0.0.0이라는 것입니다.

즉,이 코드를 보면 문제가 발견되지 않습니다. 컴파일 할 때 의도 한 버전 정보를 설정하지 않은 이유를 해결하면 문제가 발견됩니다.

코드에서 오류에 대한 반환 값을 확인하지 않으려는 경우도 있습니다.