Bonjour,
Je suis en train de d�velopper une application graphique sous Visual Studio 2010 en C++ / CLI (Windows Forms). Cette application doit communiquer avec plusieurs clients via le r�seau. Pour cela, elle utilise les sockets.

J'ai une m�thode publique issue de la classe Surveillance appel� par un pointeur dans le header de l'interface graphique (Form1.h), je n'ai pas trouv� comment acc�der aux m�thodes de la classe via Form1.h autrement que par pointeur.

Cette m�thode initialise la connexion r�seau et plante lorsque la fonction socket() est appel�. Apparemment, j'ai une exception qui n'est pas g�r�e
La g�n�ration se fait bien mais lorsque je lance le programme en mode sans d�bogage, j'ai ce message :



En mode d�bogage normal, je n'ai aucune erreur cela dit.

Les codes :

Fichier surveillance.h
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
#pragma once
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <iostream>
#include <string>
 
#define dim 14
 
ref class Surveillance
{
	int portServeur;
	SOCKET sock, sockClient, sockServeur;
private:
	int initialisationWSA();
public:
	Surveillance(void);
	int initialiserReseau();
	int demarrerSurveillance();
	int arreterSurveillance();
	void setParametres(int);
};
Fichier surveillance.cpp
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 
#include "StdAfx.h"
#include "Surveillance.h"
 
using namespace std;
 
Surveillance::Surveillance(void)
{
	portServeur = 21500;
}
// Définition des méthodes privées
int Surveillance::initialisationWSA()
{
	WSADATA WSAData;
	int ok = -1;
	int erreur = WSAStartup(MAKEWORD(2,0), &WSAData);
	if(erreur != INVALID_SOCKET)
	{
		ok = 0;
	}
	return ok;
}
// Définition des méthodes publiques
int Surveillance::initialiserReseau()
{
	// initialise la connexion réseau
	int ok = -9;
	int wsa = initialisationWSA();
	if(wsa == 0)
	{
		ok = -8;
		sockServeur = socket(AF_INET, SOCK_STREAM, 0);// ça plante à ce niveau là !
        if(wsa == 0)
	{
 
		SOCKADDR_IN serveur;
		serveur.sin_family = AF_INET;
		serveur.sin_addr.s_addr = htonl(INADDR_ANY); // accepte toutes les adresses
		serveur.sin_port = htons(portServeur); // écoute le port défini par portServeur
		if((bind(sockServeur, (SOCKADDR *)&serveur, sizeof(serveur))) == SOCKET_ERROR)
		{
			ok = -2;
		}
		else
		{
			if((listen(sockServeur, 0)) == SOCKET_ERROR)
			{
				ok = -3; 
			}
			else
			{
				SOCKADDR_IN client;
				int clientsize = sizeof(client);
				sock = accept(sockServeur, (SOCKADDR *) &client, &clientsize);
				if((sock == INVALID_SOCKET))
				{
					ok = -4;
				}
				else
				{
					//adresse = inet_ntoa(serveur.sin_addr);
					ok = 0;
				}
			}
		}
	}
	return ok;
}
int Surveillance::demarrerSurveillance()
{
	return 0;
}
int Surveillance::arreterSurveillance()
{
	return 0;
}
void Surveillance::setParametres(int serv)
{
	this->portServeur = serv;
}
Et le bout du code de Form1.h qui appele ma m�thode :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
 
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
			 this->etatInit->Text = L"Initialisation de l'application ... ";
			 int net = surv->initialiserReseau(); // ça plante à ce niveau là !!
			 this->etatInit->Text = L"Valeur : " + Convert::ToString(net); // renvoi la valeur de retour de initialiserReseau pour essai
		 }
Merci de votre aide !
Cordialement