Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
Delphi 2007 Professional
|
Problem mit delphi 2009 und alter function aus delphi 2007
5. Jun 2009, 09:57
Hallo Zusammen,
ich bin vor einiger Zeit auf Delphi 2009 umgestiegen.
wollte an einem Programm arbeiten, dass ich schon mit Delphi 2007 begonnen hatte und habe nun folgendes Problem.
Diese Function sollte eigentlich die Versionsinformationen des Programm auslesen was sie seid 2009 aber nichtmer tut.
Delphi-Quellcode:
Function GetFileInfo(Var aProductName, aCompanyName, aFileDescription, aLegalCopyright, aProductVersion: String; FileName: AnsiString): Boolean;
Var
VersionInfoSize, VerInfoSize, GetInfoSizeJunk: DWORD;
VersionInfo, Translation, InfoPointer: Pointer;
VersionValue: AnsiString;
Begin
Result := False;
VerInfoSize := GetFileVersionInfoSize(PChar(FileName), GetInfoSizeJunk);
// Wenn infos eingetragen
If VerInfoSize > 0 Then
Begin
GetMem(VersionInfo, VerInfoSize);
Try
//Beziehen der Infos
GetFileVersionInfo(PChar(FileName), 0, VerInfoSize, VersionInfo);
VerQueryValue(
VersionInfo, '\\VarFileInfo\\Translation', Translation, VerInfoSize);
VersionValue :='\\StringFileInfo\\' +
IntToHex(LoWord(LongInt(Translation^)), 4) +
IntToHex(HiWord(LongInt(Translation^)), 4) + '\\';
VersionInfoSize := 0;
VerQueryValue(VersionInfo, PChar(VersionValue + 'ProductName'),
InfoPointer, VersionInfoSize);
aProductName := AnsiString(PChar(InfoPointer));
VerQueryValue(VersionInfo, PChar(VersionValue + 'CompanyName'),
InfoPointer, VersionInfoSize);
aCompanyName := AnsiString(PChar(InfoPointer));
VerQueryValue(VersionInfo, PChar(VersionValue + 'FileDescription'),
InfoPointer, VersionInfoSize);
aFileDescription := AnsiString(PChar(InfoPointer));
VerQueryValue(VersionInfo, PChar(VersionValue + 'LegalCopyright'),
InfoPointer, VersionInfoSize);
aLegalCopyright := AnsiString(PChar(InfoPointer));
VerQueryValue(VersionInfo, PChar(VersionValue + 'ProductVersion'),
InfoPointer, VersionInfoSize);
aProductVersion := AnsiString(PChar(InfoPointer));
Finally
FreeMem(VersionInfo);
End;
Result := (aCompanyName <> '') and (aCompanyName <> '');
End;
End;
und das ist der Aufruf.
Delphi-Quellcode:
procedure TFRM_Main.N1Click(Sender: TObject);
Var
ProductName, CompanyName, FileDescription, LegalCopyright, ProductVersion : String;
Begin
try
Memo_UpVer.lines.LoadFromFile(Extractfilepath(paramstr(0))+'\Updater.ver');
except
end;
GetFileInfo(ProductName, CompanyName, FileDescription, LegalCopyright, ProductVersion, Application.ExeName);
MessageDlg('Produkt Name: '+ProductName+ #13#10'Firma: '+CompanyName+#13#10'Produktversion: '+ProductVersion+ #13#10'Datum: '+FileDescription+#13#10'Copyright: '+LegalCopyright +#13#10'Updaterversion: '+ Memo_UpVer.lines[0]+#13#10'Datum: '+ Memo_UpVer.lines[1] , mtInformation , [mbOk],0)
end;
desweiteren bekomme ich beim compilieren folgende meldungen als Hinweise.
[DCC Warnung] Main.pas(235): W1044 Bedenkliche Typumwandlung von AnsiString in PWideChar
[DCC Warnung] Main.pas(248): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'AnsiString'
[DCC Warnung] Main.pas(253): W1057 Implizite String-Umwandlung von 'AnsiString' zu 'string'
Ich hoffe sehr das ihr mir weiterhelfen könnt.
schonmal vielen Dank
Manu
Manuel Lieber heimlich schlau als unheimlich dumm
|