Pregunta

Con un método de interfaz COM declarado como este:

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

Con respecto a la clasificación, ¿se le permite al servidor reasignar la matriz contada? (Creo que lo es, pero ya no estoy seguro)

Su implementación actual solo reemplaza las ID existentes, pero me gustaría implementar un cambio (que no rompa el contrato) que pueda devolver más elementos sin introducir una nueva interfaz.

[edit] tenga en cuenta que CACLSID ya es una matriz que contiene un recuento y un puntero.

¿Fue útil?

Solución

No he hecho COM durante mucho tiempo, pero ¿es posible asignar una nueva matriz? En ese caso, ¿no deberían ser elementos CACLSID ** ?

Otros consejos

Debe dar Count como el segundo parámetro que indica el espacio para tantos elementos, usando esta biblioteca COM ordena los elementos

Primero, si desea que Foo acepte una matriz, debe agregar un parámetro que proporcione el recuento, por ejemplo:

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

Advertencia: este código no se ha compilado, solo sale de la documentación.

En segundo lugar, no puede modificar el comportamiento externo de este método sin cambiar su declaración. Para admitir el cambio de tamaño, debe poder reasignar la matriz y devolver su dirección. Puede usar un SAFEARRAY o declarar cItems y items como punteros al tipo original que toma Foo , por ejemplo:

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

Nuevamente, no compilado, por lo que en realidad tendrá que saber lo que está haciendo si usa esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top