Во-первых, если вы хотите, чтобы Foo
принял входной массив, вы должны добавить параметр, который дает счетчик, например ::
HRESULT Foo([in] int cItems, [in, out, size_is(cItems)] CACLSID * items);
Предупреждение: этот код не был скомпилирован, просто отключен от документации.
Во-вторых, вы не можете изменять внешнее поведение этого метода без изменения его объявления. Для поддержки изменения размера вы должны иметь возможность перераспределить массив и передать обратно его адрес. Вы можете использовать SAFEARRAY
или объявить cItems
и items
в качестве указателей на исходный тип Foo
дублей, например ::
HRESULT FooMutate([in, out] int *cItems, [in, out, size_is(*cItems)] CACLSID **items);
Опять же, не скомпилировано, так что вам придется знать, что вы делаете, если используете это.