![]() |
GetProxyInformation unter Delphi 2009
Hi,
bisher habe ich unter Delphi 2007 den Code aus der ![]() Unter Delphi 2009 kompiliert das auch ohne Hinweise, Warnungen etc., gibt aber in GetProxyInformation immer nur Leerstrings oder Müll zurück. Ein Wechsel auf InternetQueryOptionW brachte keine Verbesserung. Hat irgendjemand damit schon Erfolge bei der Migration nach Delphi 2009 erzielt? Gruß, Stefan |
Re: GetProxyInformation unter Delphi 2009
Hast Du auch die anderen Typen im Sourcecode angepasst ? String zu WideString u.s.w.
|
Re: GetProxyInformation unter Delphi 2009
Und auf InternetQueryOptionW umgestellt?
|
Re: GetProxyInformation unter Delphi 2009
Sorry, my bad.
In ersten Post meinte ich natürlich InternetQueryOptionW und nicht GetProxyInformationW. In der Kern-Funktion GetProxyInformation ist nicht viel zum Umstellen auf Widestring etc.:
Delphi-Quellcode:
Der Output mit dem Showmessage am Ende ergibt zig nicht darstellbare Zeichen.
function GetProxyInformation: WideString;
var ProxyInfo: PInternetProxyInfo; Len: LongWord; begin Result := ''; Len := 4096; GetMem(ProxyInfo, Len); try if InternetQueryOptionW(nil, INTERNET_OPTION_PROXY, ProxyInfo, Len) then if ProxyInfo^.dwAccessType = INTERNET_OPEN_TYPE_PROXY then begin Result := ProxyInfo^.lpszProxy; end; finally FreeMem(ProxyInfo); end; //ShowMessage(result); end; |
Re: GetProxyInformation unter Delphi 2009
Durch ein Outputdebugstring habe ich mir mal das Result in Ascii und Hex ausgeben lassen:
00000000 16:59:34.932 [4040] ????????????????‰???????????????????????????> 00000001 16:59:34.932 [4040] 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F893F3F3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E Da kommt also wirklich nur Müll zurück, das Ergebnis der InternetQueryOptionW ist aber true. |
Re: GetProxyInformation unter Delphi 2009
Unter Delphi 2007 gibt die Widestring-Variante allerdings einen gültigen String aus.
Zitat:
|
Re: GetProxyInformation unter Delphi 2009
Hmmmmm, seltsam.
Ich habe eine ähnliche Proxy-Konfig auf meinem Firmen-Rechner. Kannst du mir zur Kontrolle mal deine D2007-Exe schicken oder attachen? |
Re: GetProxyInformation unter Delphi 2009
Schaut euch mal die Übersetzung in WinInet.pas an:
Delphi-Quellcode:
und in Windows.pas
INTERNET_PROXY_INFO = record
dwAccessType: DWORD; { dwAccessType - INTERNET_OPEN_TYPE_DIRECT, INTERNET_OPEN_TYPE_PROXY, or } lpszProxy: LPCTSTR; { lpszProxy - proxy server list } lpszProxyBypass: LPCTSTR; { lpszProxyBypass - proxy bypass list } end;
Delphi-Quellcode:
Vermutlich ist das der Fehler das die übersetzung des Records nicht korrekt ist und noch auf Ansi steht.
LPCTSTR = PAnsiChar;
|
Re: GetProxyInformation unter Delphi 2009
Das unter D2007 kompilierte Testprogramm gibt bei mir korrekt den http/Proxy aus: 172.20.10.3:8080, danke Detlef!
Dann kann ich mich also auf D2009 als Quelle des Problems konzentrieren. Ich definiere mir gerade mal ein paar neue Types für die Widechar-Variante aus der Wininet.pas. Mal sehen, ob das was bringt... |
Re: GetProxyInformation unter Delphi 2009
So, indem ich den Record auf PAnsiChars umstelle funktionierts:
Delphi-Quellcode:
Danke an Bernhard und Detlef!
type
PInternetProxyInfoA = ^INTERNET_PROXY_INFOA; INTERNET_PROXY_INFOA = record dwAccessType: DWORD; { dwAccessType - INTERNET_OPEN_TYPE_DIRECT, INTERNET_OPEN_TYPE_PROXY, or } lpszProxy: PAnsiChar; { lpszProxy - proxy server list } lpszProxyBypass: PAnsiChar; { lpszProxyBypass - proxy bypass list } end; function GetProxyInformation: AnsiString; var ProxyInfo: PInternetProxyInfoA; Len: DWORD; begin Result := ''; Len := 4096; GetMem(ProxyInfo, Len); try if InternetQueryOptionW(nil, INTERNET_OPTION_PROXY, ProxyInfo, Len) then begin if ProxyInfo^.dwAccessType = INTERNET_OPEN_TYPE_PROXY then begin Result := ProxyInfo^.lpszProxy; end; end; finally FreeMem(ProxyInfo); end; end; |
Re: GetProxyInformation unter Delphi 2009
Macht es denn dann Sinn, die Unicode-Version von InternetQueryOption aufzurufen, um dann doch Ansi-Strings zurückzubekommen? Dann könnte man auch gleich InternetQueryOptionA verwenden, oder habe ich gerade einen Knick im Hirn?
|
Re: GetProxyInformation unter Delphi 2009
Hast natürlich recht, aber die Variante mit InternetQueryOption funktioniert so nicht, da das standardmäßig die Widestring-Variante ist.
Man muss den Code also explizit auf Ansi umstellen, also nicht nur InternetQueryOptionA, sondern auch PInternetProxyInfoA:
Delphi-Quellcode:
function GetProxyInformation: AnsiString;
var ProxyInfo: PInternetProxyInfoA; Len: LongWord; begin Result := ''; Len := 4096; GetMem(ProxyInfo, Len); try if InternetQueryOptionA(nil, INTERNET_OPTION_PROXY, ProxyInfo, Len) then begin if ProxyInfo^.dwAccessType = INTERNET_OPEN_TYPE_PROXY then begin Result := ProxyInfo^.lpszProxy; end; end; finally FreeMem(ProxyInfo); end; end; |
Re: GetProxyInformation unter Delphi 2009
OK, das ist einzusehen.
|
Re: GetProxyInformation unter Delphi 2009
Nochmal zur Vervollständigung:
In meiner Windows.pas (Delphi 2009, Update 2) ist LPCTSTR folgendermaßen definiert:
Delphi-Quellcode:
Das sollte also eigentlich sowohl mit D2007, als auch mit D2009 funktionieren.
LPCTSTR = {$IFDEF UNICODE}PWideChar{$ELSE}PAnsiChar{$ENDIF};
Tuts aber leider nicht, da bei Benutzen von PWideChars und InternetQueryOptionW das oben beschriebene Problem auftritt und unter D2009 nur Müll zurückgegeben wird. Der Fehler muss also noch irgendwo anders sein, aber egal, da mir die Ansi-Variante ausreicht. |
Re: GetProxyInformation unter Delphi 2009
Ich habe mal einen Report in Quality Central für die UNICODE-Variante unter Delphi 2009 erstellt, zu finden unter:
![]() |
Re: GetProxyInformation unter Delphi 2009
Der Issue wurde (angeblich) in D2010 gefixt:
Resolution Full Name Date Changed Build Fixed QC<->Raid Replicator Account 8/27/2009 5:14:37 PM 14.0.3448.21948 Comment: Status pulled automatically from the internal system Muss ich mal ausprobieren, wenn ich auf D2010 upgrade... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 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