Und knallt hoffentlich wunderschön, mit 64 Bit.
Wer nach
14 20 Jahren des
64-Bit-Delphi 64-Bit-Windows immernoch Pointer zu Integer castet, dem gehört ordentlich der Popo versohlt.
Delphi-Quellcode:
procedure SprachID2Codepage;
var
InfoSize: DWORD;
InfoData: TBytes;
Translation: Pointer;
TranslationLen: UINT;
LangID, CodePage: Word;
begin
InfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), InfoSize);
if InfoSize > 0 then
begin
SetLength(InfoData, InfoSize);
if GetFileVersionInfo(PChar(ParamStr(0)), 0, InfoSize, @InfoData[0]) then
begin
if VerQueryValue(@InfoData[0], '\VarFileInfo\Translation', Translation, TranslationLen) then
begin
LangID := PWord(Translation)^;
CodePage := PWord(IntPtr(Translation) + 2)^; // oder PByte statt IntPtr/Pointer und schön die Pointer-Arithmetik nutzen :D
ShowMessage(Format('Sprach-ID: %.4x, Codepage: %.4x', [LangID, CodePage]));
end;
end;
end;
end;
Automatische Speicherverwaltung und Casten in gleich den "richtigen" Typen ... hach, das Leben könnte so einfach sein.
Ein Therapeut entspricht 1024 Gigapeut.