Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit delphi 2009 und alter function aus delphi 2007 (https://www.delphipraxis.net/135128-problem-mit-delphi-2009-und-alter-function-aus-delphi-2007-a.html)

5etH 5. Jun 2009 08:57


Problem mit delphi 2009 und alter function aus delphi 2007
 
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

Luckie 5. Jun 2009 09:07

Re: Problem mit delphi 2009 und alter function aus delphi 20
 
2009 benutzt standardmäßig Unicoe/WideStrings. Du solltest die Funktion für die Benutzung von WideStrings umschreiben und dann natürlich auch die Unicode Versionen der API-Funktionen nutzen.

GHorn 5. Jun 2009 09:10

Re: Problem mit delphi 2009 und alter function aus delphi 20
 
Welche zeilen im beigefügten Quellcode sind denn die Zeilen
235, 248, 253??

Gruß

alphaflight83 5. Jun 2009 09:14

Re: Problem mit delphi 2009 und alter function aus delphi 20
 
Sieht mir generell nach String Problemen aus. Wie Luckie schon sagte.
Wenn möglich UniCode-Strings verwenden und die Ansis ersetzten, da
die Probleme wahrscheinlich beim Schreiben eines Strings (seit D2009 Unicode-String, vorher Ansi-String)
in einen Ansi-String auftreten.

5etH 5. Jun 2009 09:19

Re: Problem mit delphi 2009 und alter function aus delphi 20
 
super vielen Dank das wars schon was würde ich nur ohne euch machen xD :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz