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
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
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 }; }
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.
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_ */
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.
Partager