Войти или зарегистрироваться
Выберите удобный способ — аккаунт создастся автоматически.
Или войдите по логину и паролю

22.07.2007, 23:23
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
С нами:
11042306
Репутация:
2726
|
|
> Если не находит локально - то будет искать в стандартных.
ок. и это типа поможет если #include <iostream.h> не помогает?)
|
|
|

24.07.2007, 20:55
|
|
Banned
Регистрация: 13.12.2005
Сообщений: 1,091
С нами:
10741286
Репутация:
1847
|
|
У меня вопрос вообщем =\
Что значит extern "C"? То есть даже не совсем "что значит", так как я понимаю приблизительно это, а вот в каких случаях это применять?
Например вот кусочек из программы: extern "C" HWND WINAPI GetConsoleWindow();
То есть таким образом, я указываю компилятору что данная ф-ция откуда-то экспортируется? (откуда?)
И вот я не понимаю ещё, как мне узнать в каком случае нужно писать extern "C", а в каком нет?
|
|
|

24.07.2007, 20:58
|
|
Флудер
Регистрация: 12.08.2004
Сообщений: 3,793
С нами:
11444066
Репутация:
2290
|
|
Сообщение от tclover
У меня вопрос вообщем =\
Что значит extern "C"? То есть даже не совсем "что значит", так как я понимаю приблизительно это, а вот в каких случаях это применять?
Например вот кусочек из программы: extern "C" HWND WINAPI GetConsoleWindow();
То есть таким образом, я указываю компилятору что данная ф-ция откуда-то экспортируется? (откуда?)
И вот я не понимаю ещё, как мне узнать в каком случае нужно писать extern "C", а в каком нет?
когда юзаешь чужие сишные либы(типа lua) - то инклюдь их внутрь этого блока.
|
|
|

24.07.2007, 22:17
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
С нами:
10721066
Репутация:
4360
|
|
extern "C" говорит компилятору, что функцию нужно манглить по правилам Си, а не по правилам С++. Может использоваться и для импорта, и для экспорта.
|
|
|

24.07.2007, 23:28
|
|
Познающий
Регистрация: 26.07.2005
Сообщений: 54
С нами:
10942709
Репутация:
46
|
|
При компоновке программы с подключением модулей скомпилированных с-компилятором надо дабавлять extern "C", поскольку с++-компилятор, используя имя функции данное человеком, генерирует своё уникальное имя. Линковщик компонуя объектные файлы (библиотеки, dll-ки ...), полученные разными компиляторами просто не обнаружит необходимой функции. Такая ситуация может возникнуть при использовании сторонних библиотек, dll, объектных файлов. А какже при использовании в своем проекте файлов с разными расширениями *.c или *.cpp, поскольку компилятор обращает внимание на раширение файла.
|
|
|

25.07.2007, 22:17
|
|
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
С нами:
10370602
Репутация:
472
|
|
sys64, использовать функции WinApi, документации хватает.
|
|
|

01.08.2007, 14:40
|
|
Banned
Регистрация: 16.12.2006
Сообщений: 27
С нами:
10211153
Репутация:
-17
|
|
qwerty qwerty qwerty
проверка =)
|
|
|

01.08.2007, 14:51
|
|
Banned
Регистрация: 16.12.2006
Сообщений: 27
С нами:
10211153
Репутация:
-17
|
|
переполз с дельфи на си...
в качестве первого проекта выбрал "remot acces system" =)
интересно ваше мнение, что можно зделать лучше? как будет быстрее? как будет грамотней с точки зрения си программиста? и пожалуйста почему?(обязательно)
+ предложившему что-то дельное.
Код:
//main module
#include "NetFunc.h"
#include <windows.h>
#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text, EWRX /IGNORE:4078")
#pragma comment(linker,"/ENTRY:WinMain")
int StartSession(SOCKET,SOCKADDR_IN);
void ErrorFunc(int Fr)
{
MessageBox(0,"1111","1111",1);
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
char chA=0;
int iReset=0;
int iOff=0;
while(!iOff)//Main loop
{
WSADATA sWsaData;
SOCKET hLSock;
long host=INADDR_ANY;
short port=6677;
if(WSAStartup(MAKEWORD(2,0),&sWsaData)!=SOCKET_ERROR)
{
hLSock = socket(AF_INET,SOCK_STREAM,0);
if(hLSock!=INVALID_SOCKET)
{
SOCKADDR_IN addr_Sock;
addr_Sock.sin_family = AF_INET;
addr_Sock.sin_addr.s_addr = htonl(INADDR_ANY);
addr_Sock.sin_port = htons(port);
if(bind(hLSock,(LPSOCKADDR)&addr_Sock,sizeof(addr_Sock))!=SOCKET_ERROR)
{
if (listen(hLSock,1)!=SOCKET_ERROR)
{
while(!iReset)//Accept loop
{
int size=sizeof(addr_Sock);
SOCKET hWSock= accept(hLSock,(LPSOCKADDR)&addr_Sock,&size);
if(hWSock!=INVALID_SOCKET)
{
int i=StartSession(hWSock,addr_Sock);
if(!i)iReset=1;
if(i<0) iOff=1;
}
else//accept
{
ErrorFunc(5);
}
shutdown(hWSock,0);
closesocket(hWSock);
}//Accept loop
}
else//listen
{
ErrorFunc(4);
}
}
else//bind
{
ErrorFunc(3);
}
shutdown(hLSock,1);
closesocket(hLSock);
}
else//Creat listen sock
{
ErrorFunc(2);
}
WSACleanup();
}
else//WSAStartup
{
ErrorFunc(1);
}
Sleep(2000);
}//Main loop
return 0;
}
Код:
//NetFunc.cpp
#include <winsock2.h>
#define SOCK_TOUT 5000000;
/////////////////////////////////////////////Send data
int SendData(SOCKET hSock, char *pBuffer, int len)
{
/////Encrypt
/////
int ts=0;
int ss=0;
timeval SendTimeout;
fd_set fds;
FD_ZERO(&fds);
FD_SET(hSock, &fds);
SendTimeout.tv_sec=0;
SendTimeout.tv_usec=SOCK_TOUT;
while(len > 0)
{
ts = select(0, NULL, &fds, NULL, &SendTimeout);
if(!ts) return -1;//time out
if(ts < 0) return -2;//sel error
ss = send(hSock, pBuffer, len, 0);
if(ss < 0)
return -3;//send error
else
{
len -= ss;
pBuffer += ss;
}
}
return 0;//ok
}
////////////////////////////////////////////Recv data
int RecvData(SOCKET hSock, char *pBuffer, int len)
{
int ts=0;
int rs=0;
timeval ReceiveTimeout;
fd_set fds;
FD_ZERO(&fds);
FD_SET(hSock, &fds);
ReceiveTimeout.tv_sec = 0;
ReceiveTimeout.tv_usec = SOCK_TOUT;
while(len > 0)
{
ts = select(0, &fds, NULL, NULL, &ReceiveTimeout);
if(!ts) return -1;//time out
if(ts<0) return -2;//sel error
rs = recv(hSock, pBuffer, len, 0);
if(rs < 0)
{
return -3;//recv error
}
else
{
len -= rs;
pBuffer += rs;
}
}
/////Decrypt
/////
return 0;//ok
}
////////////////////////////////////////////
Код:
//executer.cpp
#include "NetFunc.h"
#include <windows.h>
int StartSession(SOCKET hSock,SOCKADDR_IN addr_Sock)
{
char Buff[4];
char szCom[3];
char szSubCom[3];
//ident
//logon
//exec. comands
while(1)
{
if (recv(hSock,&Buff[0],sizeof(Buff[0]),MSG_PEEK)<=0) return WSAGetLastError();
if (RecvData(hSock,&Buff[0],sizeof(Buff))!=0) return WSAGetLastError();
//analyze comand
for(int i=0;sizeof(Buff)-1;i++)
{
if(i<2)szCom[i]=Buff[i];
else szSubCom[i-2]=Buff[i];
}
szCom[3]=0;
szSubCom[3]=0;
switch(atoi(szCom))
{
case 0:break;
case 1:break;
case 2:break;
default: return 1;
}
//analyze comand
if (SendData(hSock,&Buff[0],sizeof(Buff))!=0) return WSAGetLastError();
}
return 0;
}
Последний раз редактировалось X-lord; 01.08.2007 в 15:28..
|
|
|

01.08.2007, 14:59
|
|
Banned
Регистрация: 16.12.2006
Сообщений: 27
С нами:
10211153
Репутация:
-17
|
|
сорри за флуд... какой тег исп. для оформления кода?
|
|
|

01.08.2007, 15:13
|
|
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
С нами:
10393869
Репутация:
2032
|
|
Сообщение от X-lord
сорри за флуд... какой тег исп. для оформления кода?
[C0DE]...[/C0DE] вместо 0 = O
|
|
|
|
 |
|
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|