Delphi-PRAXiS
Seite 12 von 16   « Erste     2101112 1314     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   TMSWebUpdate - eine neue WebUpdate-Komponente (https://www.delphipraxis.net/109301-tmswebupdate-eine-neue-webupdate-komponente.html)

thestallion90 11. Mai 2011 11:43

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hey Marco,

wenn ich die Komponente installieren will kommt folgender Fehler (den Int64 und den Indy10 Fehler habe ich beheben können, bei dem hier weiß ich nicht weiter) :

[DCC Fehler] MaryTools.pas(166): E2251 Doppeldeutiger überladener Aufruf von 'StrPas'

Der Fehler bezieht sich auf folgenden Code:

Delphi-Quellcode:
 function GetInfo(const aKey: string): string;
  begin
    Result := '';
    VerKey := Format('\StringFileInfo\%.4x%.4x\%s',
      [LoWord(Integer(VerBufValue^)), HiWord(Integer(VerBufValue^)), aKey]);
    if VerQueryValue(VerBuf, PChar(VerKey), VerBufValue, VerBufLen) then
      Result := StrPas(VerBufValue);  //<---Fehler
  end;
Hast Du eine Idee, was ich da machen kann?

Habe Delphi XE, kann es daran liegen?

lg, Marco

himitsu 11. Mai 2011 12:02

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Delphi-Quellcode:
var
  VerBufValue: Pointer;
Es gibt zwei Version von StrPas ... einmal ANSI (PAnsiChar) und Unicode (PWideChar)
da VerBufValue aber nur als Pointer deklariert ist, kann Delphi nicht mehr entscheiden was genommen werden soll.

Lösung:
Deklariere VerBufValue als PChar.



Dank einer automatischen Typkonvertierung könnte man Delphi-Referenz durchsuchenStrPas auch weglassen.
Delphi-Quellcode:
var
  VerBufValue: PChar;

...

function GetInfo(const aKey: string): string;
begin
  VerKey := Format('\StringFileInfo\%.4x%.4x\%s',
    [LoWord(PInteger(VerBufValue)^), HiWord(PInteger(VerBufValue)^), aKey]);
  if VerQueryValue(VerBuf, PChar(VerKey), VerBufValue, VerBufLen) then
    Result := VerBufValue
  else
    Result := '';
end;
PS:
Zitat:

Zitat von OH
StrPas ist nur aus Gründen der Abwärtskompatibilität vorhanden.


thestallion90 11. Mai 2011 12:14

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hey himitsu,

wow, nicht schlechte Reaktionszeit für einen aufgewärmten Thread :P

Allein VerBufValue anders zu deklarieren hat nicht funktionert, da Delphi die Variable an anderer Stelle im Code nichtmehr geschmeckt hat. Habe es jetzt so gelöst:

Delphi-Quellcode:
 function GetInfo(const aKey: string): string;
  var PCharVerBufValue : PChar;  //<--- neue Variable als PChar
  begin
    Result := '';
    VerKey := Format('\StringFileInfo\%.4x%.4x\%s',
      [LoWord(Integer(VerBufValue^)), HiWord(Integer(VerBufValue^)), aKey]);
    if VerQueryValue(VerBuf, PChar(VerKey), VerBufValue, VerBufLen) then
      PCharVerBufValue := VerBufValue; //<---Wert wird aus VerBufValue in PChar "umformatiert"
      Result := SysUtils.StrPas(PCharVerBufValue); //<-- Delphi schluckt
  end;

thestallion90 11. Mai 2011 12:21

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Also verstehe ich es richtig, dass

- StrPas nur aus einem PChar einen PAnsiChar macht
- und man das aber mittlerweile nichtmehr braucht weil Delphi das automatisch übernimmt wenn man einem PAnsiChar ein PChar zuweist?

DeddyH 11. Mai 2011 12:22

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Delphi-Referenz durchsuchenSysUtils.StrPas

[edit] IIRC hat man das unter Delphi 1 noch gebraucht, ab Delphi 2 nicht mehr. [/edit]

himitsu 11. Mai 2011 12:27

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
StrPas macht aus einem PAnsiChar einen AnsiString
und seit Delphi 2009 wird auch noch aus einem PWideChar ein UnicodeString gemacht.

Als es die Unicodeversion noch nicht gab, konnte man auch einen untypisierten Zeiger (Pointer) verwenden, welcher dann als PAnsiChar angesehn wurde,
da es nur eine Variante von StrPas, mit einem Zeigertypen gab (die mit PAnsiChar/PChar).

thestallion90 12. Mai 2011 17:17

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
mal noch ne andere Sache:

Ich hab die Update Komponente jetzt eingebunden und in dem Projekt ne neue Form angelegt. Heute morgen war meine exe noch schlanke 2,x MB groß, jetzt sind es fast 10 MB :pale:
Dadurch dauert natürlich jedes Update 1000 mal länger *übertreib*

Mal ehrlich, die units und die Komponente wiegen fast gar nichts, das sind ein paar kB. Auf der Form ist auch nix drauf außer n Memo und ne ProgressBar. Wo kommen denn von jetzt auf gleich die MBs her? Hab auch in den Projekt-Optionen nichts verändert von wegen Debug-Infos und so (die Suche stieß mich immer wieder auf dicke Debug-Infos in der EXE). Kommt das daher, dass in dem Programm jetzt die Indy-komponente integriert ist? Die hatte ich vor dem MSWebUpdate ja noch nicht? Was kann man da machen?

shmia 12. Mai 2011 17:26

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

Zitat von thestallion90 (Beitrag 1100471)
Kommt das daher, dass in dem Programm jetzt die Indy-komponente integriert ist?

Ja, Indy vergrössert dein Programm relativ stark.
Hätte man auf das gehört, was ich auf Seite 6 im Beitrag #54 geschrieben habe, dann wäre es jetzt kein Problem Indy durch etwas Schlankeres zu ersetzen.

thestallion90 12. Mai 2011 17:46

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

Zitat von shmia (Beitrag 1100474)
Ja, Indy vergrössert dein Programm relativ stark.
Hätte man auf das gehört, was ich auf Seite 6 im Beitrag #54 geschrieben habe, dann wäre es jetzt kein Problem Indy durch etwas Schlankeres zu ersetzen.

hngrrr, schadee :P naja, dann muss ich halt in den saueren Apfel beißen...

generic 12. Mai 2011 19:48

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab euch mal meinen Vortrag von den letzten Delphi-Tagen angehängt.
  • nutzt keine Komponenten von dritten
  • nutzt keine Indys
  • nutzt OS integrierte Funktionen wie msxml / bits

Wenn ihr nochmal nach lesen wollt, im Entwickler Mag. 04/10 ist der passende Artikel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 Uhr.
Seite 12 von 16   « Erste     2101112 1314     Letzte »    

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