|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.10.2024, 10:54 | #1 |
Новичок
Джуниор
Регистрация: 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. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Объеденение двух функций в одной ячейке | 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 |