Attribut __property et accesseurs associés
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:
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
}; |
Code:
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;
}; |
Mais ils sont tous les 2 vides.
Si je ne met rien à l'intérieur, ma propriété n'est pas mise à jour via un set.
Code du main client:
Code:
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; |
Ca me donne:
Et si je met dans le set:
Code:
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;
}; |
La, ça tourne en boucle jusqu'au débordement de la pile:
Code:
1 2 3 4 5 6 7
|
......
Value: 10
Value: 10
Value: 10
Value: 10
..... |
Quelqu'un voit-il d'où vient le problème?