Bonsoir,

J'ai longtemps h�sit� avant de poster.
Je ne suis pas du genre � me plaindre ("J'y arrive pas, aidez moi !") mais un peu d'aide ne serait pas de trop...

Avant de poser mon poser mon probl�me, je pr�cise que j'utilise Visual Studio 2005 pour un projet Windows Form.

J'ai une partie de mon code qui est du C++ classique ('Native') et le retse, une IHM Windows Form ('Managed').

Dans le code 'native', j'ai un thread qui tourne.

Mon but est d'appeller une fonction de l'IHM (pour mettre � jour du texte par exemple) depuis le thread.

Mon code est simple :

Form1.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
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
 
#pragma once
#include "ClasseC\ClasseC.h"
 
namespace IHM_Test
{
 
	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;
 
	public ref class Form1 : public System::Windows::Forms::Form
	{
		public:
			Form1(void)
			{
				InitializeComponent();
				maClasse = new ClasseC();
			}
			int toto()
			{
				blabla->Text = maClasse->DonnerA().ToString();
				return 0;
			}
 
		protected:
			static ClasseC * maClasse;
 
			~Form1()
			{
				if (components)
				{
					delete components;
				}
 
				delete maClasse;
			}
 
		private:
			System::ComponentModel::Container ^components;
			System::Windows::Forms::TextBox^  blabla;
 
 
		#pragma region Windows Form Designer generated code
				void InitializeComponent(void)
				{
					this->blabla = (gcnew System::Windows::Forms::TextBox());
					this->SuspendLayout();
					// 
					// blabla
					// 
					this->blabla->Location = System::Drawing::Point(22, 21);
					this->blabla->Name = L"blabla";
					this->blabla->Size = System::Drawing::Size(95, 20);
					this->blabla->TabIndex = 1;
					// 
					// Form1
					// 
					this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
					this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
					this->ClientSize = System::Drawing::Size(156, 62);
					this->Controls->Add(this->blabla);
					this->Name = L"Form1";
					this->Text = L"Form1";
					this->ResumeLayout(false);
					this->PerformLayout();
 
				}
		#pragma endregion
 
};
}
ClasseC/ClasseC.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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
#ifndef CLASSEC_H_
#define CLASSEC_H_
 
// includes
#include "windows.h"
 
class ClasseC
{
	public:
		~ClasseC() {}
		ClasseC()
		{
			a=0;
			CreateThread(0, 0x1000, ClasseC::RxThread, (LPVOID) 0, 0, NULL);
		}
		int DonnerA() { return a; }
 
	protected:		
		static int a;
		static HANDLE test;
 
		static DWORD WINAPI RxThread( void* par )
		{
			while( a < 100 )
			{
				WaitForSingleObject(test,1000);
				a += 10;
 
//Appeller IHM_Test::toto() et ainsi afficher a dans l'IHM
			}
 
			return 0;
		}	
};
 
int ClasseC::a;
HANDLE ClasseC::test;
#endif /* CANCASE_H_ */
Je me suis pench� sur la notion d'�v�nement (avec _event, _hook _unhook..) puis j'ai essay� les 'delegate' et j'ai m�me tent� un 'gcroot' pour que ClasseC soit 'managed' sans parler des #pragma managed et #pragma unmanaged qui n'ont pas fait grand chose.

Alors soit je suis pas tomb� sur les bon exemples, soit je ne suis pas "dou�" mais toujours est il que je ne suis arriv� � rien.

Si quelqu'un avait ne serait-ce qu'une piste pour m'�clairer ...
Je lui en serait tr�s tr�s reconnaissant.


Ah et si je poste au mauvais endroit, je m'excuse par avance.