J'ai vu qu'il fallait que j'incluse winsock2 avant windows.h. J'ai donc déplacé les include du tutorial que j'ai placé dans mon fichier principal, en tête de fichier. Cependant maintenant j'obtient des erreurs suivantes
c:\documents and settings\potierj\my documents\visual studio 2008\projects\ati100info\ati100info\sendudptrap.c(12) : error C2275: 'SOCKET' : illegal use of this type as an expression
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(118) : see declaration of 'SOCKET'
1>c:\documents and settings\potierj\my documents\visual studio 2008\projects\ati100info\ati100info\sendudptrap.c(12) : error C2146: syntax error : missing ';' before identifier 'sock'
1>c:\documents and settings\potierj\my documents\visual studio 2008\projects\ati100info\ati100info\sendudptrap.c(12) : error C2065: 'sock' : undeclared identifier
1>c:\documents and settings\potierj\my documents\visual studio 2008\projects\ati100info\ati100info\sendudptrap.c(13) : error C2275: 'SOCKADDR_IN' : illegal use of this type as an expression
1> c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(588) : see declaration of 'SOCKADDR_IN'
1>c:\documents and settings\potierj\my documents\visual studio 2008\projects\ati100info\ati100info\sendudptrap.c(13) : error C2146: syntax error : missing ';' before identifier 'sin'
1>c:\documents and settings\potierj\my documents\visual studio 2008\projects\ati100info\ati100info\sendudptrap.c(13) : error C2065: 'sin' : undeclared identifier
1>c:\documents and settings\potierj\my documents\visual studio 2008\projects\ati100info\ati100info\sendudptrap.c(15) : error C2143: syntax error : missing ';' before 'type'
1>c:\documents and settings\potierj\my documents\visual studio 2008\projects\ati100info\ati100info\sendudptrap.c(16) : error C2143: syntax error : missing ';' before 'type'
1>c:\documents and settings\potierj\my documents\visual studio 2008\projects\ati100info\ati100info\sendudptrap.c(18) : error C2065: 'ip' : undeclared identifier
1>c:\documents and settings\potierj\my documents\visual studio 2008\projects\ati100info\ati100info\sendudptrap.c(18) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int'
1>c:\documents and settings\potierj\my documents\visual studio 2008\projects\ati100info\ati100info\sendudptrap.c(18) : warning C4024: 'sprintf' : different types for formal and actual
Si j'essaye de compiler le fichier seul, il marche très bien, donc je pense que c'est un problème de librairies ou des options dans les bas fond du compilateurs que je ne connais pas.
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 8 janv. 2009 à 19:13
Salut,
Déjà, la seule librairie (et encore, on dit bibliothèque) que tu site est ws2_32.lib, les autres fichiers ne sont que des headers.
L'ordre de leur inclusion n'a pas d'importance :
#include <windows.h>
#include <winsock2.h>
est équivalent à :
#include <winsock2.h>
#include <windows.h>
(du moins, de ce que je connais, puis chez moi ça marchait niquel).
Quant au #pragma comment(lib,"ws2_32.lib"), il ne fonctionen que sous Visual C++, sous Dev C++ (comme sous Codes::Blocks) il faut paramétrer manuellement le linker.
Là je dis peut-être une connerie, mais je tenterais de rajouter -lws2_32 aux options du linker (-l + nom_de_la_lib mais je ne suis pas du tout sûr).
Essaye déjà ça.
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 8 janv. 2009 à 21:52
Ah merde ^^ d'accord je saurais.
Pourtant, comme à chaque fois, j'ai vérifié avant de poster le commentaire, sur le net j'ai trouvé plusieurs problèmes identiques où certains expliquaient aussi que la directive #pragma ne fonctionnait que sous Visual. Et j'ai regardé une de mes sources, windows.h est inclus avant winsock2.h (mais aucun #pragma, les paramètres du linker se font via une boite de dialogue). C'est peut-être ça qui change, je ne sais pas.
KurpeusLondon
Messages postés11Date d'inscriptionlundi 5 janvier 2009StatutMembreDernière intervention12 janvier 2009 12 janv. 2009 à 13:22
J'ai placé les header dans l'ordre ci dessus, mais j'arrive toujours pas a compiler correctement. Quelqu'un pourrait etre pourrait en dire un peu plus par rapport aux possibles options du linker cité par uaip ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
KurpeusLondon
Messages postés11Date d'inscriptionlundi 5 janvier 2009StatutMembreDernière intervention12 janvier 2009 12 janv. 2009 à 13:59
Ce que je ne comprends pas c'est que si je compile seul le fichier et que je lui ajoute les mêmes includes, je n'ai pas de problème. Dès que je l'ajoute a mon projet, cela ne marche plus...
struct sData{
char * label;
unsigned int value;
char frame[9]; /* Modbus communication use addr "0" to broadcast and 1 to 247 to address a node. 248 to 255 are reserved addresses. To be convert in Hex */
/* According to the ATI100 transfer panel, broadcast adresse only usable for writing functions (6 and 16). */
/* ModBus define two function to compute the CRC : RTU and ASCII. ATI100 use RTU */
};
sock=socket(AF_INET,SOCK_DGRAM,0);//On initialise le socket avec SOCK_DGRAM pour dire qu'on est en UDP
bind(sock,(SOCKADDR*)&sin,sizeof(sin));
memset(pBufferOut,0,sizeof(pBufferOut));
sendto(sock,pBufferOut,sizeof(pBufferOut),0,(SOCKADDR*)&sin,sizeof(sin));
//sendto envoie des packets udp, ses parametres :
// 1 : le socket avec lequel on envoie
// 2 : la chaine a envoyer
// 3 : la taille de cette chaine
// 4 : ??? chais po
// 5 : les parametre (convertis en structure SOCKADDR
// 6 : la taille de la structure SOCKADDR_IN