Mit einem Verfahren COM-Schnittstelle deklariert wie folgt aus:kann COM-Server neu zuweisen ([in, out] CACLSID * arg)?
[ object,
uuid(....),
]
interface IFoo : IUnknown
{
HRESULT Foo([in, out] CACLSID * items);
}
Im Hinblick auf die Rangierung, wird der Server den gezählten Array neu zuzuteilen erlaubt? (I denken es ist, aber ich bin mir nicht mehr sicher)
Die aktuelle Implementierung nur die bestehenden IDs ersetzt, aber ich möchte eine Änderung implementieren (das wäre Vertrag nicht brechen), die mehrere Objekte zurückgeben können, ohne Einführung einer neuen Schnittstelle.
[Bearbeiten] Bitte beachten Sie, dass CACLSID bereits ein Array ist, das eine Zählung und einen Zeiger enthält.
ja, CACLSID = Struktur {unsigned long cElems; CLSID * pElems; } wo pElements mit CoAlloc zugewiesen wird. Also nicht genau "ein neues Array zuweisen", sondern "resize the existing" - was wahrscheinlich genau das ist, warum ich unsicher bin. } – peterchen
Ich bin mir ziemlich sicher, dass Sie nicht die Größe ändern dürfen, wenn Ihre IDL so aussieht Verwenden Sie so genannte offene Arrays, wenn Sie die Größe ändern müssen. Etwas in der Art von: HRESULT Foo ([in] lang cMax, [in, out] lang * pcActual, [in, out, size_is (cMax), length_is (* pcActual)] CLSID * pElemn) –
Wie ich schon sagte habe ich COM schon lange nicht mehr programmiert, aber ich habe meine "Essential COM" von Don Box geöffnet und gefunden :-) –