Problem GetFileVersionInfo / VerQueryValue

Problem GetFileVersionInfo / VerQueryValue

Beitragvon maksh » 19. Nov 2008, 15:04 Problem GetFileVersionInfo / VerQueryValue

Hallo

ich hab da eine Funktion die unter WIN32 korrekt funktioniert. Sobald ich aber das ganze unter WinCE/Arm kompilieren will bekommen ich die Meldungen wegen den unterschiedlichen Typen (PChar/PWideChar).

Ich hab versucht nach meinem Verständnis das Ganze auf WideChar umzubauen, aber ohne Erfolg.

Hat da jemand ein Beispiel in der Schublade wie ich mit GetFileVersionInfoSize,GetFileVersionInfo,VerQueryValue die Informationen aus der EXE-Datei auslesen kann unter WinCE/Arm.


Hier noch meine Funkltion für WinXP32

Code: Alles auswählen
// Fileinfo
const
  InfoNum                 = 10;
  I_Def                   = 0;
  I_Bez                   = 1;
  I_Value                 = 2;
 
  I_VersionHand           = 1;
  I_ProductName           = 2;
  I_FileVersion           = 3;
  I_FileDescription       = 4;
  I_CompanyName           = 5;
  I_InternalName          = 6;
  I_LegalCopyright        = 7;
  I_LegalTradeMarks       = 8;
  I_OriginalFileName      = 9;
  I_Comments              = 10;
 
var
  InfoStr                 : array[1..InfoNum] of array[0..2] of string =
                           (('ProductVersion','Version',''),
                            ('ProductName','Product-Name',''),
                            ('FileVersion','Build-Version',''),
                            ('FileDescription','Description',''),
                            ('CompanyName','Company',''),
                            ('InternalName','Internal-Name',''),
                            ('LegalCopyright','Copyright',''),
                            ('LegalTradeMarks','TradeMarks',''),
                            ('OriginalFileName','Original-Filename',''),
                            ('Comments','Comments',''));
 
procedure GetDateiInfo(ProgName:string);
var
  nInfoSize, Len, i: DWORD;
  Buf: PChar;
  Value: PChar;
  Trans: DWORD;
  pTrans: array [0..MAX_PATH] of Char;
  s : string;
begin
  for i := 1 to InfoNum do
    InfoStr[i,I_Value] := '';
 
  nInfoSize := GetFileVersionInfoSize(PChar(ProgName), nInfoSize);
  if nInfoSize > 0 then begin
    Buf := AllocMem(nInfoSize);
 
    if GetFileVersionInfo(PChar(ProgName), 0, nInfoSize, Buf) then begin
      // Erst die Sprache(n) ermitteln und dann abfragen
      if VerQueryValue(Buf, '\VarFileInfo\Translation',Pointer(Value), Len) then begin
        // erste Sprache holen
        Trans := HiWord(PDWORD(Value)^) or (Word(PDWORD(Value)^) shl 16);
        wvsprintf(pTrans, '%8.8x', PChar(@Trans));
        s := StrPas(pTrans);
      end;
 
      for i := 1 to InfoNum do begin
        if VerQueryValue(Buf, PChar('\StringFileInfo'+ s + '\' + InfoStr[i,0]), Pointer(Value), Len) then
          InfoStr[i,I_Value] := Value;
      end;
    end;
    FreeMem(Buf, nInfoSize);
  end
  else InfoStr[I_VersionHand,I_Value] := ('
No version information found');
end;
maksh
 
Beiträge: 6
Registriert: 18. Aug 2008, 14:37
Wohnort: Schaffhausen

Beitragvon theo » 19. Nov 2008, 18:57 Re: Problem GetFileVersionInfo / VerQueryValue

> Ich hab versucht nach meinem Verständnis das Ganze auf WideChar umzubauen, aber ohne Erfolg.

Wie hast du's denn versucht?
VerQueryValue benutzt scheint's die Widestring Variante auf WinCE:

function VerQueryValue(pBlock:LPVOID; lpSubBlock:LPWSTR; lplpBuffer:LPVOID; var puLen:UINT):WINBOOL; external KernelDLL name 'VerQueryValueW';

Dann gib ihm halt WideString. http://www.delphibasics.co.uk/RTL.asp?Name=PWideChar
theo
 
Beiträge: 8069
Registriert: 11. Sep 2006, 18:01

Beitragvon maksh » 20. Nov 2008, 08:17 Re: Problem GetFileVersionInfo / VerQueryValue

Hallo

ich hab da verschiedenes Versucht.

1.Variante ProgName als Widestring
2.Buf als Pointer und alle PChar als PWideChar

Aber mein Gedanke geht in die Richtung, dass da etwas mit Ansi und UTF8 oder so im Argen liegt.
Irgendwo fehlt da eine Umwandlung. Aber ich finde nicht heraus, in welche Richtung und wo genau.

Ich hab zum Beispiel Zeile 44 und Zeile 48 so abgeändert, dass ich direkt eine Zeichenfolge da eingefügt habe.
Code: Alles auswählen
'\Verzeichnis\Verzeichnis\prog.exe'

Dann hat es wenigstens soweit funktioniert, dass er bis zur Zeile 50 gekommen ist.
maksh
 
Beiträge: 6
Registriert: 18. Aug 2008, 14:37
Wohnort: Schaffhausen

• Themenende •

Zurück zu Windows mobile



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried