Суть проблемы следующая. Был код, он компилировался и работал. Все супер. Тут я решил вставить его часть в свой проект и начались проблемы. Код: 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" ) т.к. без этого выдавало еще кучу всяких ошибок... Где я напортачил??? Может где-то настройки проекта не те или что....
WSAIoctl(sn, SIO_RCVALL, &j, sizeof(j), 0, 0, (LPDWORD)&in, 0, 0) не может преобразовать? мы ему поможем хотя на самом деле DWORD это unsigned long тобишь безнаковое 4 байтовое целое... если бы ты обявил in как unsigned long или DWORD он бы не ругался.
Спасибо! С DWORDом все получилось. Ато я когда ему указывал LPDWORD - он компилил, но при екзекьюте слал меня в глубокий нокаун. Странно то, что изначально он был определен как int и компилятор не ругался...я и подумал что все ок...
LPDWORD это ссылка на значение (DWORD *) - тоесть означает что ты должен передать ссылку. типа &in но если ты назаваешь LPDWORD in и напишешь &in то конечно будет попа... ты передаешь указатель на указатель которого нет ))