Bonjour,
J'ai créé un objet DCOM qui a 1 propriété nommé "nb". Mon éditeur (C++builder) a lui-même créé les accesseurs correspondants: set_nb et get_nb.
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 interface IComplexClass : public IDispatch { public: virtual HRESULT STDMETHODCALLTYPE get_nb(long* Value/*[out,retval]*/) = 0; // [201] virtual HRESULT STDMETHODCALLTYPE set_nb(long Value/*[in]*/) = 0; // [201] #if !defined(__TLB_NO_INTERFACE_WRAPPERS) long __fastcall get_nb(void) { long Value; OLECHECK(this->get_nb((long*)&Value)); return Value; } __property long nb = {read = get_nb, write = set_nb}; #endif // __TLB_NO_INTERFACE_WRAPPERS };Mais ils sont tous les 2 vides.
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 STDMETHODIMP TComplexClassImpl::set_nb(long Value) { try { } catch(Exception &e) { return Error(e.Message.c_str(), IID_IComplexClass); } return S_OK; }; STDMETHODIMP TComplexClassImpl::get_nb(long* Value) { try { } catch(Exception &e) { return Error(e.Message.c_str(), IID_IComplexClass); } return S_OK; };
Si je ne met rien à l'intérieur, ma propriété n'est pas mise à jour via un set.
Code du main client:
Ca me donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // creation de l'objet distant TCOMIComplexClass CC = CoComplexClass::CreateRemote(L"UC06P1556.fr.pierre-fabre.lcl"); // on set la propriété nb CC.set_nb(10); // on la recupere long value; CC.get_nb(&value); // on l'affiche cout << "nb client: " << value << endl;
Et si je met dans le set:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2nb client: 0
La, ça tourne en boucle jusqu'au débordement de la pile:
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 STDMETHODIMP TComplexClassImpl::set_nb(long Value) { try { // on affiche Value dans le memo AnsiString texte = "Set Value: "; texte += Value; Form1->Memo1->Lines->Add(texte); // on donne la valeur Value à la propriété nb this->nb = Value; } catch(Exception &e) { return Error(e.Message.c_str(), IID_IComplexClass); } return S_OK; };
Quelqu'un voit-il d'où vient le problème?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ...... Value: 10 Value: 10 Value: 10 Value: 10 .....
Partager