Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2024, 10:54   #1
G_N
Новичок
Джуниор
 
Регистрация: 25.09.2024
Сообщений: 1
По умолчанию Странности вызова двух системных функций

Решаемая задача в Delphi 7: для варианта "асинхронного" TClientWinSocket во внутренней псевдо-сети машины - не указывать явно его адрес ("127.0.0.1") и номер порта для протокола "TCP", а - посмотреть, как это сделает Windows 7 (v. 6.1) - вызвав WSAAsyncGetHostByName() и WSAASyncGetServByName().

И вот - практическая реализация двух тестовых фрагментов - цельнодраных из Sckt.pas: где FLookupHandle - дважды успешно прошёл
проверку "на ноль", но обе системные функции - предложили именно пустой буфер - по указателю FGetHostData^ :

var FGetHostData: pointer; FHandle:HWnd; FLookupHandle: THandle {cardinal}; WSAData: TWSAData;
F: file of byte;

begin WSAStartup($0101, WSAData);
AssignFile(F,'WSAAsyncGetHostByName .dat'); Rewrite(F);// протокол вывода в FGetHostData^

FGetHostData:= AllocMem(MAXGETHOSTSTRUCT {=1024});
FLookupHandle:=
WSAAsyncGetHostByName(FHandle{окна - диспетчера системных сообщений}, CM_LOOKUPCOMPLETE,
'Nicolas-ПК'{ PChar(Name) }, FGetHostData, MAXGETHOSTSTRUCT);
(* И теперь по идее - FGetHostData должен указывать на структуру
THostEnt = record
H_Name: PChar;// указатель на array of char, содержащий Host Name
H_Aliases:^PChar;// массив псевдонимов Host Name - в ASCIIZ
H_AddrType: Smallint;// тип IP-адреса (AF_INET или AF_INET6)
H_Length: Smallint; // длина адреса (4 или 6)
case byte of 0: (H_Addr_list:^PChar); 1: (H_Addr:^PChar) end;*)

// вывод в файл содержимого области FGetHostData^ - с размером MAXGETHOSTSTRUCT
BlockWrite(F, FGetHostData^, MAXGETHOSTSTRUCT); CloseFile(F);

// И далее - такие же манипуляции с буфером FGetHostData^ - после вызова
// WSAASyncGetServByName(): когда в FGetHostData^ - ожидалось появление структуры
// TServEnt = record
// s_name: PChar {official service name}; s_aliases: ^PChar {alias list}
// {$ifdef WIN64}
// s_proto: PChar {protocol ('TCP' etc.) }; s_port:word {port};
// {$else} s_port:word; s_proto: PChar; {$endif} end;

AssignFile(F,'WSAASyncGetServByName .dat'); Rewrite(F);
FLookupHandle:=
WSAASyncGetServByName(FHandle,CM_LO OKUPCOMPLETE, 'FTP'{PChar(Service)}, 'TCP', FGetHostData, MAXGETHOSTSTRUCT);
BlockWrite(F, FGetHostData^, MAXGETHOSTSTRUCT); CloseFile(F);
WSACleanup; Exit;
Но оба эти буфера - оказались пустыми (т.е. содержащими только нули)
Есть какие-нибудь гипотезы на эту тему?

Последний раз редактировалось G_N; 17.10.2024 в 10:58.
G_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объеденение двух функций в одной ячейке mssod Microsoft Office Excel 3 04.02.2012 23:46
OpenGL, график функций двух переменных. WarHamster Мультимедиа в Delphi 0 11.03.2011 21:05
Славание двух массивов и их сортировка с использование функций! sproject Помощь студентам 7 15.04.2010 12:28
запись двух функций в одну ячейку (ВПР+ЕСЛИОШИБКА) grichanuk Microsoft Office Excel 2 17.11.2009 14:46
построить ГРАФИКИ двух функций felmor Паскаль, Turbo Pascal, PascalABC.NET 1 29.04.2009 16:35