problemen met interface implementatie (.idl)

Status
Niet open voor verdere reacties.

Jabber

Gebruiker
Lid geworden
8 feb 2007
Berichten
271
In een bestaande interface wordt het volgende gedefinieerd:

Code:
interface ICollection : IDispatch
{
  [helpstring("method Initialize")] 
  HRESULT Initialize([out, retval] VARIANT_BOOL* blnSuccess);
  [helpstring("Reference an element in the collection."),
   id(DISPID_VALUE),
   propget]
  HRESULT Item([in, out] VARIANT* vntIndexKey, [out, retval] IItem** objItem);
  [helpstring("Retrieve the number of elements in the collection."),
   id(0x60030101),
   propget]
  HRESULT Count([out, retval] long*);
  [helpstring("Enumerate this collection with the For...Each syntax."),
   id(DISPID_NEWENUM),
   propget,
   hidden]
  HRESULT NewEnum([out, retval] VARIANT*);
};

Deze interface wordt enerzijds gebruikt door VB programma, en ik wil hem implementeren in een C++ programma. Echter hoe kan ik bv HRESULT Count([out, retval] long*) implenteren?

STDMETHODIMP Class1::Count(/*[out, retval]*/ long*)
{
int i = this->vList.size(); // size of vector in C++
// Hier moet de return waarde gezet worden:
// normaal: *long value = i;
// maar nu kan alleen: *long = i;
// Hoe gaat C++ om met deze notatie?
return S_OK;
}
 
Die vage enum is er om te kunnen itereren door een collectie door middel van For... each. In VB is dit makkelijk te realiseren, echter in C++ is dit een hels karwei, dit heb ik geschrapt. Ik itereer nu door de count op te halen en dan met een normale for loop er doorheen te gaan.

De missing long* (count) heb ik toegevoegd. Heeft geen consequenties voor de VB kant. Dit is voor VB hetzelfde.
 
STDMETHODIMP Class1::Count(/*[out, retval]*/ long*)
{
int i = this->vList.size(); // size of vector in C++
// Hier moet de return waarde gezet worden:
// normaal: *long value = i;
// maar nu kan alleen: *long = i;
// Hoe gaat C++ om met deze notatie?
return S_OK;
}

Of ik begrijp niet wat je bedoelt of je hebt
PHP:
STDMETHODIMP Class1::Count(/*[out, retval]*/ long*) long* ?? Je geeft je argument geen naam
STDMETHODIMP Class1::Count(/*[out, retval]*/ long* retval)
{
  long i = this->vList.size(); // size of vector in C++
 *retval = i;
return S_OK;
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan