Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WSAAddressToString: несоответствие параметров ? E2033 : Ругается компилятор...  
:(
    Опции темы
malor
  Дата 17.10.2012, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



В код добавил строчку 
Цитата
WSAAddressToStringW(LpAdapterAddresses^.FirstUnicastAddress.Address.lpSockaddr,
                                     LpAdapterAddresses^.FirstUnicastAddress.Address.iSockaddrLength,
                                     @protocolInfo, @text,  bufferSize);


с целью получения IP в привычном виде (т.е., например, 192.168.50.200).

Код
function GetAdaInfo2(out AInfoStr: AnsiString; const AOnlyMac: Boolean):Boolean;
const
  cntAdaCount=2;
  cntAdaTypesInt: array[0..cntAdaCount] of Cardinal = ($6, $47, $90);
  cntAdaTypesDef: array[0..cntAdaCount] of AnsiString =
                 ('Ethernet Network Adapter',
                  'Wireless Network Adapter',
                  'FireWire Network Adapter');
var
  i: Integer;
  bf: Cardinal;
  LqFind: Boolean;
  LsMac: AnsiString;
  LpAdapterAddresses: PIP_ADAPTER_ADDRESSES;

    text : array[1..46] of WideChar;
    bufferSize :DWORD;
  protocolInfo: WSAPROTOCOL_INFO;
begin

  bufferSize := sizeof(text);

  Result := True;
  AInfoStr := '';
  try
    bf := 0;
    if GetAdaptersAddresses(0, 0, nil, nil, @bf) <> ERROR_BUFFER_OVERFLOW then Abort;
    try
      GetMem(LpAdapterAddresses, bf);
      if GetAdaptersAddresses(0, 0, nil, LpAdapterAddresses, @bf) <> ERROR_SUCCESS then Abort;

      while LpAdapterAddresses <> nil do
      begin
        try
          // Определяем тип адаптера
          LqFind := False;
          for i := 0 to cntAdaCount do
            if LpAdapterAddresses^.IfType = cntAdaTypesInt[i] then
            begin
              LqFind := True;
              Break;
            end;

          if not LqFind then Continue;

          //собираем информацию об устройстве
          if not AOnlyMac then
            AInfoStr := Format('%s%s (%s)'#13#10'%s'#13#10,
                             [AInfoStr, LpAdapterAddresses^.FriendlyName,
                              LpAdapterAddresses^.Description, cntAdaTypesDef[i]]);

            WSAAddressToStringW(LpAdapterAddresses^.FirstUnicastAddress.Address.lpSockaddr,
                               LpAdapterAddresses^.FirstUnicastAddress.Address.iSockaddrLength,
                               @protocolInfo, @text,  bufferSize);

          LsMac := '';
          if LpAdapterAddresses^.PhysicalAddressLength = 0 then Continue;

          for i := 0 to LpAdapterAddresses^.PhysicalAddressLength - 1 do
            LsMac := LsMac + IntToHex(LpAdapterAddresses^.PhysicalAddress[i], 2) + '-';
          SetLength(LsMac, Length(LsMac) - 1);
          AInfoStr := Format('%s%s'#13#10#13#10, [AInfoStr, LsMac]);
        finally
          LpAdapterAddresses := LpAdapterAddresses^.Next;
        end;
      end;
    finally
      FreeMem(LpAdapterAddresses, bf);
    end;
  except
    Result := False;
    AInfoStr := '';
  end;
end;

Компилятор выдает:
[DCC Error] UMain.pas(88): E2033 Types of actual and formal var parameters must be identical

user posted image

Что не так ?

Delphi XE

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  WSAAddressToStringW_E2033.jpg 91,63 Kb
PM MAIL   Вверх
Illusion Dolphin
Дата 17.10.2012, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 2
Всего: 63



Цитата

[dcc32 Error] Unit18.pas(37): E2003 Undeclared identifier: 'PIP_ADAPTER_ADDRESSES'
[dcc32 Error] Unit18.pas(40): E2003 Undeclared identifier: 'WSAPROTOCOL_INFO'
[dcc32 Error] Unit18.pas(47): E2003 Undeclared identifier: 'GetAdaptersAddresses'

Дальше смотреть бессмысленно. 


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
malor
  Дата 17.10.2012, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



У компилятора к другим строкам программы претензий нет. Кроме 88-й.

Это сообщение отредактировал(а) malor - 17.10.2012, 23:02
PM MAIL   Вверх
volvo877
Дата 18.10.2012, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004

Репутация: 1
Всего: 116



WSAAddressToStringW первым параметром хочет получить Win32.WinSock2.sockaddr, а ты ей подсовываешь мало того, что PSockAddr (т.е., явно не хватает разыменования), так еще и sockaddr из модуля Win32.IpTypes. Разные типы - вот тебе и несовместимость параметров.
PM MAIL   Вверх
malor
  Дата 18.10.2012, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Как тогда лучше получать IP-адреса адаптера, основываясь на возвращаемых 
функцией GetAdaptersAddresses() данных?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1232 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.