Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

17.05.2009, 22:49
|
|
Новичок
Регистрация: 12.07.2007
Сообщений: 8
Провел на форуме: 81254
Репутация:
1
|
|
Проблема с WSAIoctl
Суть проблемы следующая.
Был код, он компилировался и работал. Все супер.
Тут я решил вставить его часть в свой проект и начались проблемы.
Код:
Код:
#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" ) т.к. без этого выдавало еще кучу всяких ошибок...
Где я напортачил???
Может где-то настройки проекта не те или что....
|
|
|

18.05.2009, 00:55
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
WSAIoctl(sn, SIO_RCVALL, &j, sizeof(j), 0, 0, (LPDWORD)&in, 0, 0)
не может преобразовать? мы ему поможем
хотя на самом деле DWORD это unsigned long тобишь безнаковое 4 байтовое целое...
если бы ты обявил in как unsigned long или DWORD он бы не ругался.
Последний раз редактировалось Gar|k; 18.05.2009 в 00:59..
|
|
|

18.05.2009, 01:40
|
|
Новичок
Регистрация: 12.07.2007
Сообщений: 8
Провел на форуме: 81254
Репутация:
1
|
|
Спасибо!
С DWORDом все получилось.
Ато я когда ему указывал LPDWORD - он компилил, но при екзекьюте слал меня в глубокий нокаун.
Странно то, что изначально он был определен как int и компилятор не ругался...я и подумал что все ок...
|
|
|

18.05.2009, 02:19
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
LPDWORD это ссылка на значение (DWORD *) - тоесть означает что ты должен передать ссылку.
типа &in
но если ты назаваешь
LPDWORD in
и напишешь &in то конечно будет попа... ты передаешь указатель на указатель которого нет ))
|
|
|

18.05.2009, 16:53
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
LPDWORD это ссылка на значение (DWORD *) - тоесть означает что ты должен передать ссылку.
типа &in
небольшая поправка LPDWORD это указатель на DWORD, а не ссылка)
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|