Проблема с WSAIoctl

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Virus Catcher, 17 May 2009.

  1. Virus Catcher

    Virus Catcher New Member

    Joined:
    12 Jul 2007
    Messages:
    8
    Likes Received:
    1
    Reputations:
    0
    Суть проблемы следующая.
    Был код, он компилировался и работал. Все супер.


    Тут я решил вставить его часть в свой проект и начались проблемы.



    Код:
    Code:
    #include <winsock2.h>
    #include <stdio.h>
    
    ....
    
    int in;
    
    ...
    
    if (WSAIoctl(sn, SIO_RCVALL, &j, sizeof(j), 0, 0, &in, 0, 0) == SOCKET_ERROR)
         {
    		MessageBox (HWND_DESKTOP, "WSAIoctl() failed.", "Error", MB_OK | MB_ICONEXCLAMATION);
    		return 1;
         }
    
    ......
    
    
    Проблема в том, что компилятор начал ругатся, мол: error C2664: 'WSAIoctl' : cannot convert parameter 7 from 'int *' to 'LPDWORD'

    Но в исходном проекте все работало!!!

    Кроме того, пришлось добавить #pragma comment( lib, "Ws2_32.lib" ) т.к. без этого выдавало еще кучу всяких ошибок...

    Где я напортачил???
    Может где-то настройки проекта не те или что....
     
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    WSAIoctl(sn, SIO_RCVALL, &j, sizeof(j), 0, 0, (LPDWORD)&in, 0, 0)

    не может преобразовать? мы ему поможем :)

    хотя на самом деле DWORD это unsigned long тобишь безнаковое 4 байтовое целое...

    если бы ты обявил in как unsigned long или DWORD он бы не ругался.
     
    _________________________
    #2 Gar|k, 18 May 2009
    Last edited: 18 May 2009
  3. Virus Catcher

    Virus Catcher New Member

    Joined:
    12 Jul 2007
    Messages:
    8
    Likes Received:
    1
    Reputations:
    0
    Спасибо!
    С DWORDом все получилось. :)

    Ато я когда ему указывал LPDWORD - он компилил, но при екзекьюте слал меня в глубокий нокаун.

    Странно то, что изначально он был определен как int и компилятор не ругался...я и подумал что все ок...
     
  4. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    LPDWORD это ссылка на значение (DWORD *) - тоесть означает что ты должен передать ссылку.
    типа &in

    но если ты назаваешь
    LPDWORD in
    и напишешь &in то конечно будет попа... ты передаешь указатель на указатель которого нет ))
     
    _________________________
  5. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    небольшая поправка LPDWORD это указатель на DWORD, а не ссылка)