![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Пытаюсь сделать вот что:
Есть такая строка: Код:
proxyserver := proxyinfo^.lpszproxy; Edit5.Text:=proxyserver; Тип proxyserver: string; lpszproxy: widechar. Пытался делать Код:
proxyserver :=AnsiString(proxyinfo^.lpszproxy); Edit5.Text:=proxyserver; Вместо квадратов получаются вопросы. Функцию типа Widechartostr нашел. В примере сказано, что: http://www.delphibasics.co.uk/RTL.as...deCharToString Код:
var wideCharArray : array[0..5] of WideChar; myString : String; begin // Set up our WideChar array wideCharArray[0] := 'H'; wideCharArray[1] := 'e'; wideCharArray[2] := 'l'; wideCharArray[3] := 'l'; wideCharArray[4] := 'o'; wideCharArray[5] := #0; // Terminates WideChar strings // Copy to a normal string myString := WideCharToString(wideCharArray); // Show what the copy gave ShowMessage(myString); end; После попыток что-то сделать оказалось, что на вариант: Код:
Buffer2[0]:=proxyinfo^.lpszproxy; где Buffer2[0]:array[0..5] of WideChar Обьявил Buffer2:PWideChar и присвоил: Код:
var Buffer4:PWideChar; proxyserver:string; . . Buffer4:=proxyinfo^.lpszproxy; proxyserver := WideCharToString(Buffer4); Edit5.Text:=proxyserver; Всё компилируется, но в окне Edit выводится "ㄱ⸴㈱⸷㐲⸶㘳㠺㠰0ㄱ⸴㈱⸷㐲⸶㘳㠺㠰0₰" вместо цифр и букв. Версия Delphi 2009. Помогите, пожалуйста! lmikle: пользуемся тегами!!! Последний раз редактировалось Inqizitor, 04.08.2009 в 18:58. |
|
#2
|
|||
|
|||
|
В 2009 тип String - это Unicode-строка. Соответсвенно, тебе надо вообщето конвертировать в Unicode. Кстати, а ты посмотри, что у тебя в данных реально лежит (через watch отладчика).
|
|
#3
|
|||
|
|||
|
Цитата:
Buffer4:=proxyinfo^.lpszproxy; и значение Buffer4 после этой операции: '?'#$2E34'?'#$2E37'?'#$2E36'???0?'#$2E34'?'#$2E37' ?'#$2E36'???0'#$20B0'?????????'#$20B8'???????????? ????'#$B00'?????'#$368'?????????'#$C65'??????????? ???'#$A54'??????????????'#$2E74'??????'#$2E74'??'# $606'?????'#$2E74'??'#$B65#$E00'???????'#$608'???? ???????'#$A60'??????'#$600'??????с?????'#$802'???? '#$600'????????? Вместо вопросов - квадраты. Но они сюда не копируются .А должно быть 114.127.246.36:8080 (например). |
|
#4
|
|||
|
|||
|
Мда... на первый взгляд чушь какая-то...
А откуда ты получаешь информацию? |
|
#5
|
|||
|
|||
|
Цитата:
Прочитал про метод lpszproxy - вот им и сделал и хотел на результат посмотреть, а оно эвон как . |
|
#6
|
|||
|
|||
|
Полный код давай. Ты вообще смотришь что тебе функция возвращает. У тебя прокси-то настроен? А то может там и нет никаких данных, а ты пытаешься их читать... DNS это не прокси
![]() |
|
#7
|
|||
|
|||
|
Цитата:
Код такой: Код:
procedure TForm2.Button1Click(Sender: TObject); var PIInfo : PInternetProxyInfo; proxyinfo: pinternetproxyinfo; len: longword; proxyserver: string; Buffer2: array[0..5000] of PWideChar; Buffer4: PWideChar; begin Edit5.Text:=''; len := 4096; getmem(proxyinfo, len); try if internetqueryoption(nil, internet_option_proxy, proxyinfo, len) then if proxyinfo^.dwaccesstype = internet_open_type_proxy then begin //proxyserver := proxyinfo^.lpszproxy; //AnsiString(proxyinfo^.lpszproxy) Buffer4:=proxyinfo^.lpszproxy; proxyserver := WideCharToString(Buffer4); Edit5.Text:=proxyserver; end finally freemem(proxyinfo); end; Данные: Адрес 168.0.0.9 Порт 80. |
|
#8
|
|||
|
|||
|
У меня вот так работает:
Код:
uses WinInet;
procedure TForm1.Button1Click(Sender: TObject);
var
proxyinfo: pinternetproxyinfo;
len: longword;
begin
Edit5.Text:='';
len := 4096;
getmem(proxyinfo, len);
try
if internetqueryoption(nil, internet_option_proxy, proxyinfo, len) then
if proxyinfo^.dwaccesstype = internet_open_type_proxy then
begin
Edit5.Text := StrPas(proxyinfo^.lpszproxy);
end
finally
freemem(proxyinfo);
end;
end;правда, это на Д7. |
|
#9
|
|||
|
|||
|
Цитата:
М-да, значит в 2009 что-то они намудрили, т.к. у меня с этим кодом выводит 〮㘮㠺㘮㠺0〮㘮〮㘮㠺0〮㘮 |
|
#10
|
|||
|
|||
|
Ну выводит другой адрес. Тот, который я указал в настройках...
Посмотри по справке функции конвертирования. StrPas переводит PChar в AnsiString. Найди функцию с правильным целевым типом. Или попробуй конвертнуть сначала в AnsiString, а потом уже ее присвоить Edit'у. |
|
#11
|
|||
|
|||
|
Цитата:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, wininet, StdCtrls;
type
INTERNETPROXYINFO = record
dwAccessType: DWORD;
lpszProxy: PAnsiChar;
lpszProxyBypass: PAnsiChar;
end;
PInetProxyInfo = ^INTERNETPROXYINFO;
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure GetProxyData(var ProxyEnabled: boolean; var ProxyServer: ansistring; var ProxyPort: integer);
var
ProxyInfo: PInetProxyInfo;
Len: LongWord;
i, j: integer;
begin
Len := 4096;
ProxyEnabled := false;
GetMem(ProxyInfo, Len);
try
if InternetQueryOptionA(nil, INTERNET_OPTION_PROXY, ProxyInfo, Len)
then
if ProxyInfo^.dwAccessType = INTERNET_OPEN_TYPE_PROXY then
begin
ProxyEnabled:= True;
ProxyServer := ProxyInfo^.lpszProxy;
//showmessage('!');
end
finally
FreeMem(ProxyInfo);
end;
if ProxyEnabled and (ProxyServer <> '') then
begin
i := Pos('http=', ProxyServer);
if (i > 0) then
begin
Delete(ProxyServer, 1, i+5);
j := Pos(';', ProxyServer);
if (j > 0) then
ProxyServer := Copy(ProxyServer, 1, j-1);
end;
i := Pos(':', ProxyServer);
if (i > 0) then
begin
ProxyPort := StrToIntDef(Copy(ProxyServer, i+1, Length(ProxyServer)-i), 0);
ProxyServer := Copy(ProxyServer, 1, i-1)
end
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
pren: boolean;
s: ansistring;
p: integer;
begin
GetProxyData(pren, s, p);
edit1.Text:=(s+':'+inttostr(p));
end;
end. |
|
#12
|
|||
|
|||
|
Во-во. Про то я и говорил, что надо использовать AnsiString.
|