PDA

Просмотр полной версии : Проблема с WSAIoctl


Virus Catcher
17.05.2009, 22:49
Суть проблемы следующая.
Был код, он компилировался и работал. Все супер.


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



Код:

#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" ) т.к. без этого выдавало еще кучу всяких ошибок...

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

Gar|k
18.05.2009, 00:55
WSAIoctl(sn, SIO_RCVALL, &j, sizeof(j), 0, 0, (LPDWORD)&in, 0, 0)

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

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

если бы ты обявил in как unsigned long или DWORD он бы не ругался.

Virus Catcher
18.05.2009, 01:40
Спасибо!
С DWORDом все получилось. :)

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

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

Gar|k
18.05.2009, 02:19
LPDWORD это ссылка на значение (DWORD *) - тоесть означает что ты должен передать ссылку.
типа &in

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

razb
18.05.2009, 16:53
LPDWORD это ссылка на значение (DWORD *) - тоесть означает что ты должен передать ссылку.
типа &in
небольшая поправка LPDWORD это указатель на DWORD, а не ссылка)