Frage

Mit einem COM-Interface-Methode wie folgt deklariert:

[ object,
  uuid(....),
]
interface IFoo : IUnknown 
{
  HRESULT Foo([in, out] CACLSID * items);
}

Im Hinblick auf die Rangierung ist der Server der gezählten Array neu zuzuteilen erlaubt? (I denkt es ist, aber ich bin mir nicht mehr sicher)

Die aktuelle Implementierung ersetzt nur die ID der vorhandenen, aber ich möchte eine Änderung implementieren (das wäre Vertrag nicht brechen), die mehr Objekte ohne eine neue Schnittstelle zur Einführung zurückkehren.

[Bearbeiten] Bitte beachten Sie, dass CACLSID ist bereits eine Anordnung, einen Zählwert und einen Zeiger enthält.

War es hilfreich?

Lösung

Ich habe COM nicht für eine sehr lange Zeit getan, aber es ist auch möglich, ein neues Array zuweisen? In diesem Fall sollte es nicht CACLSID ** items werden?

Andere Tipps

Sie sollten den Grafen als zweiten Parameter geben, die für so viele Anzahl von Elementen des Raumes anzeigt, mit diesem COM-Bibliothek Marschälle die Elemente

Erstens, wenn Sie wollen Foo ein in Array zu akzeptieren, sollten Sie einen Paramter hinzufügen, die die Zählung gibt, z.

HRESULT Foo([in] int cItems, [in, out, size_is(cItems)] CACLSID * items);

. Achtung: dieser Code kompiliert nicht nur Dokumentation abgehend

Zum anderen können Sie das externe Verhalten dieser Methode verändern, ohne seine Erklärung zu ändern. Zur Unterstützung der Redimensionierung, müssen Sie in der Lage sein das Array neu zu verteilen und übergeben Sie zurück seine Adresse. Sie können eine SAFEARRAY verwenden oder cItems erklären und items als Zeiger auf den ursprünglichen Typ Foo nimmt, z.

HRESULT FooMutate([in, out] int *cItems, [in, out, size_is(*cItems)] CACLSID **items);

Auch nicht kompiliert, so müssen Sie wirklich wissen, was Sie tun, wenn Sie diese verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top