Проблемы с сокетами
пробовал через сеть - во время выполнения выдает такую хрень -
function pointer declared with a different calling convention.Может кто знает в чем дело? И вообще причем тут function pointer?
:{
void __stdcall f(int a),
а в вызывающей программе
void __cdecl f(int a).
Параметры при этом могут передаваться неверно.
Вы вызываете экспортируемую функцию, причём её описание в DLL отличается от описания при вызове разными соглашениями по передаче параметров. Например, такая ошибка будет, если в DLL есть описание
void __stdcall f(int a),
а в вызывающей программе
void __cdecl f(int a).
Параметры при этом могут передаваться неверно.
а я вроде бы ничего такого не описывал:( ошибка возникает именно при полученнии(сама ф-я recv в буфер загоняет эту херню) мот это проблема связана с юникодом/анси?
а я вроде бы ничего такого не описывал:( ошибка возникает именно при полученнии(сама ф-я recv в буфер загоняет эту херню) мот это проблема связана с юникодом/анси?
Вообще-то идей нет... что значит «проблема связана с юникодом/анси» я не понимаю. Функция recv() была написана в 1980 году, и тогда никакого юникода не было, а если бы вы использовали юникод на месте ansi или наоборот, то, как мне кажется, было бы предупреждение ещё при компиляции...
Вот только одно. Может быть, у вас #include <winsock.h>, а надо #include <winsock2.h>?
А точно, что recv() вызывается из вашего кода, а не из какой-нибудь готовой библиотеки, которая была кем-то криво скомпилирована?
А можно кусок неработающего кода показать??
сервер
while(bytes_recv=recv(my_sock,buff_cl,sizeof(buff_cl),0)
!=SOCKET_ERROR)
{
//client write dir
if(!strncmp(buff_cl,"dir",3))
{
strcpy(curr_dr_mask,curr_dr);
strcat(curr_dr_mask,mask);
buff_cl[0]=0;
sprintf(buff_cl,TEXT("Path: %s"),curr_dr);
send(my_sock,buff_cl,SIZE,0);
if(h=FindFirstFile((LPCTSTR)curr_dr_mask,&fd))
do{
buff_cl[0]=0;
strcat(buff_cl,fd.cFileName);
if(fd.dwFileAttributes!=
FILE_ATTRIBUTE_DIRECTORY)
{
sz=FileSizeInString(fd.nFileSizeHigh,
fd.nFileSizeLow);
strcat(buff_cl,"(");
strcat(buff_cl,sz);
strcat(buff_cl,"kb)");
}
send(my_sock,(const char *)buff_cl,SIZE,0);
}while(FindNextFile(h,&fd));
}
....
клиент в цикле принимает сообщения
while(...)
{
....
recv(...)
....
}
В каком виде возникает сообщение "function pointer declared with a different calling convention"?
WSAStartup()?
На чем компилите/собираете?
В каком виде возникает сообщение "function pointer declared with a different calling convention"?
WSAStartup()?
MVC 5.0.Да я использую WSAStartup()