Pergunta

Com um método de interface COM declarada como este:

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

Com relação à triagem, é o servidor permitido para realocar a matriz contadas? (I pensar que é, mas eu não tenho certeza anymore)

A sua implementação atual só substitui a existente ID do, mas eu gostaria de implementar uma mudança (que não iria quebrar contrato) que pode retornar mais itens sem a introdução de uma nova interface.

[editar] Por favor note que CACLSID já é uma matriz, que contém uma contagem e um ponteiro.

Foi útil?

Solução

Eu não fiz COM por um longo tempo, mas é mesmo possível alocar uma nova matriz? Nesse caso, ele não deve ser CACLSID ** items?

Outras dicas

Você deve dar o conde como o segundo parâmetro que indica o espaço para tantos número de elementos, usando este COM marechais biblioteca os elementos

Em primeiro lugar, se você quiser Foo a aceitar uma em ordem, você deve adicionar um paramter que dá a contagem, por exemplo:.

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

Atenção:., Este código não foi compilado, apenas saindo documentação

Em segundo lugar, você não pode modificar o comportamento externo deste método sem alterar a sua declaração. Para redimensionamento apoio, você precisa ser capaz de realocar a matriz e passar de volta o seu endereço. Você pode usar um SAFEARRAY ou declarar cItems e items como ponteiros para o tipo de original Foo leva, por exemplo:.

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

Novamente, não é compilado, assim que você realmente tem que saber o que você está fazendo se você usar isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top