AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TMSWebUpdate - eine neue WebUpdate-Komponente
Thema durchsuchen
Ansicht
Themen-Optionen

TMSWebUpdate - eine neue WebUpdate-Komponente

Ein Thema von Marco Steinebach · begonnen am 27. Feb 2008 · letzter Beitrag vom 11. Aug 2013
Antwort Antwort
Real-TTX

Registriert seit: 7. Mai 2008
Ort: Stuttgart / Wertheim
136 Beiträge
 
Delphi 2007 Enterprise
 
#1

Re: TMSWebUpdate - eine neue WebUpdate-Komponente

  Alt 10. Aug 2009, 11:41
Soweit ich weiß, liegt es an einer alten Indy Version. Ich hatte das Problem auch einmal. Ein altes Projekt von mir, wurde nicht mehr compiled. Hatte zuvor eigentlich nur ein Indy Update gemacht...

Gruß, Real-TTX
  Mit Zitat antworten Zitat
thestallion90

Registriert seit: 10. Aug 2008
22 Beiträge
 
Delphi XE Starter
 
#2

AW: TMSWebUpdate - eine neue WebUpdate-Komponente

  Alt 11. Mai 2011, 11:43
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.403 Beiträge
 
Delphi 12 Athens
 
#3

AW: TMSWebUpdate - eine neue WebUpdate-Komponente

  Alt 11. Mai 2011, 12:02
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 von OH:
StrPas ist nur aus Gründen der Abwärtskompatibilität vorhanden.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Mai 2011 um 12:05 Uhr)
  Mit Zitat antworten Zitat
thestallion90

Registriert seit: 10. Aug 2008
22 Beiträge
 
Delphi XE Starter
 
#4

AW: TMSWebUpdate - eine neue WebUpdate-Komponente

  Alt 11. Mai 2011, 12:14
Hey himitsu,

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

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;
  Mit Zitat antworten Zitat
thestallion90

Registriert seit: 10. Aug 2008
22 Beiträge
 
Delphi XE Starter
 
#5

AW: TMSWebUpdate - eine neue WebUpdate-Komponente

  Alt 11. Mai 2011, 12:21
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#6

AW: TMSWebUpdate - eine neue WebUpdate-Komponente

  Alt 11. Mai 2011, 12:22
Delphi-Referenz durchsuchenSysUtils.StrPas

[edit] IIRC hat man das unter Delphi 1 noch gebraucht, ab Delphi 2 nicht mehr. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.403 Beiträge
 
Delphi 12 Athens
 
#7

AW: TMSWebUpdate - eine neue WebUpdate-Komponente

  Alt 11. Mai 2011, 12:27
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).
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz