Как использовать смарт-указатель COM в качестве входных аргументов для вызова, например, библиотечных функций - PullRequest
2 голосов
/ 30 января 2012

Как лучше всего использовать интеллектуальные указатели CComPtr или _com_ptr в качестве аргументов для ввода-вывода?

void FunctionPrototype(Test** test) {
    // you can use here test or create a new Test here and assign to test
}

CComPtr<Test> test;
test.CoCreateInstance(..., ..., ...);
test->SetValue(10);
FunctionPrototype(&test); // assertion since test.p is not NULL

1 Ответ

6 голосов
/ 30 января 2012

Рядом с определением CComPtr<T>::operator& есть комментарий:

Оператор assert on & обычно указывает на ошибку. Если это действительно однако для этого нужно явно указать адрес члена p.

Так что вызывайте свою функцию, используя

FunctionPrototype(&test.p);
...