Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Enum Protocs на .NET, Получение всех поддерживаемых протоколов 
:(
    Опции темы
fessko
Дата 1.3.2007, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 25.6.2006
Где: Минск, Беларусь

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



В WinAPI есть такая функция EnumProtocols, которая возвращает инфу о всех протоколах, поддерживаемых хостов. В библиотеке .NET аналога я не нашел. Решил вызвать данную функцию средстввами .NET
Код

        [DllImport("Wsock32.dll", EntryPoint = "EnumProtocolsW", SetLastError = true,  CharSet = CharSet.Unicode, ExactSpelling = true,
        CallingConvention = CallingConvention.StdCall)]
        public static extern int EnumProtocols(ref int lpiProtocols, out ProtocolInfo[] lpProtocolBuffer,ref int lpdwBufferLength);

       private void Enum()
        {
            ProtocolInfo[] infos = new ProtocolInfo[1];
            int size = Marshal.SizeOf(typeof(ProtocolInfo));
            int k = 0;
            int result = EnumProtocols(ref k,out infos,ref size);
        }


ProtocolInfo:
Код

    public struct ProtocolInfo
    {
        int dwServiceFlags;
        int iAddressFamily;
        int iMaxSockAddr;
        int iMinSockAddr;
        int iSocketType;
        int iProtocol;
        int dwMessageSize;
        string lpProtocol;

    }


Функция отрабатывает, но результат нулевой. info == null. Не мтогу понять в чем проблема. 

Это сообщение отредактировал(а) fessko - 1.3.2007, 00:32
PM MAIL   Вверх
Yama
Дата 1.3.2007, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



С точки зрения синтаксиса вызова Win32 API функции все правильно. Тут написано о самой функции и попробуй сделать так:
Код

        [DllImport("Wsock32.dll", EntryPoint = "EnumProtocolsW", SetLastError = true,  CharSet = CharSet.Unicode, ExactSpelling = true,
        CallingConvention = CallingConvention.StdCall)]
        public static extern int EnumProtocols(ref int lpiProtocols, out ProtocolInfo[] lpProtocolBuffer,ref int lpdwBufferLength);

       private void Enum()
        {
            ProtocolInfo[] infos; //не определяя количество структур в массиве,т.к. как я понял из описания, информация возвращается по всем протоколам, а не по 1.
            int size = Marshal.SizeOf(typeof(ProtocolInfo));
            int k=0;
            int result = EnumProtocols(ref k,out infos,ref size);
        }


--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
fessko
Дата 1.3.2007, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 25.6.2006
Где: Минск, Беларусь

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



Все равно EnumProtocols возвращает null. A значение size устанавливает в 0.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

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


 




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


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

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