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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2011, 14:21   #1
zibman
Новичок
Джуниор
 
Регистрация: 08.03.2011
Сообщений: 2
По умолчанию Delphi:Получение IP DNS-сервера используя GetNetworkParams из iphlpapi.dll

Задача полностью изложена в заголовке.
Моя ОС: Win7.
( Код должен работать и на других Windows. На MSDN написано, что начиная с 98 поддерживается GetNetworkParams .)
Среда разработки: Embarcadero® Delphi® XE Version 15.0.3890.34076.


Вот адрес GetNetworkParams на MSDN.

Проблема в том, что DnsServerList у меня заполнен #0. А при выводе HostName показывает какие-то иероглифы.


Сначала использовал готовую функцию.
Потом взял GetDNSbyIpHlp из исходников Synapse.

В конце-концов переписал все сам:

Код:
unit ManualDNS;

interface
uses Windows,  classes, dialogs, sysutils;
const
MAX_HOSTNAME_LEN=128;
MAX_DOMAIN_NAME_LEN=128;
MAX_SCOPE_ID_LEN=256;
type

IpAddress= record
_String:array[0..15] of Char;
end;
MIP_ADDR_STRING=record
Next:^MIP_ADDR_STRING;
IP_ADDRESS_STRING:IpAddress;
IP_MASK_STRING:IpAddress;
Context:DWORD;
end;

MFixed_INFO=record
HostName:array [0..MAX_HOSTNAME_LEN + 4-1] of char;
DomainName:array [0..MAX_DOMAIN_NAME_LEN + 4-1] of char;
CurrentDnsServer:^MIP_ADDR_STRING;
DnsServerList:MIP_ADDR_STRING;
NodeType:Cardinal;
ScopeId:array [0..MAX_SCOPE_ID_LEN + 4-1] of char;
EnableRouting:Cardinal;
EnableProxy:Cardinal;
EnableDns:Cardinal;
end;




function GetDNS:string;
function GetNetworkParams(var pFixedInfo: MFixed_INFO; Var pOutBufLen: cardinal): DWORD; stdcall;
implementation
function GetNetworkParams; external 'iphlpapi.dll' Name 'GetNetworkParams';


function GetDNS:string;
var Test_FI: MFixed_INFO;
Outlength:Cardinal;
begin

Outlength:=SizeOf(Test_FI);
IF GetNetworkParams(Test_FI,Outlength)<>ERROR_SUCCESS  then
begin
  IF GetNetworkParams(Test_FI,Outlength)<>ERROR_SUCCESS  then
  begin
    ShowMessage('MY DNS FAIL on load'); exit;
  end;
end;
 ShowMessage('HostName= '+Test_FI.HostName+ ' DnsServerList= '+ Test_FI.DnsServerList.IP_ADDRESS_STRING._String);

end;
Пробовал еще какие-то примеры, загруженные из Интернета.

Результат везде один и тот же: Иероглифы в HostName и #0 в DnsServerList.

Пример, с MSDN на С прекрасно компилируется и выводит все нужные параметры.
zibman вне форума Ответить с цитированием
Старый 09.03.2011, 12:17   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Замените все Char на AnsiChar.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 09.03.2011, 15:20   #3
zibman
Новичок
Джуниор
 
Регистрация: 08.03.2011
Сообщений: 2
По умолчанию

Все гениальное просто. Спасибо огромное, работает.
zibman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение данных из сторонней dll Memfis1992 Общие вопросы Delphi 4 21.10.2010 09:19
IPHLPAPI.DLL в windows 7 Horus92 Работа с сетью в Delphi 1 15.06.2010 09:55
Вызов формы внутреннего (dll) ActiveX сервера HelloEverybody Компоненты Delphi 2 29.01.2008 17:25
Получение функций из DLL NITRON Общие вопросы Delphi 8 12.09.2007 17:32