Я столкнулся с этой проблемой преобразования указателя С++/CLI в собственный указатель на С++. Это фон:
Я пишу приложение форм Windows, используя С++/CLI. Приложение выполняет вызов на несколько COM-интерфейсов. При создании экземпляра (внутри класса С++/CLR) объекта через интерфейс COM, я передаю (void**)(&provider)
в качестве последнего аргумента в CoCreateInstance
, как в:
HRESULT CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, (void**)(&provider));
Однако я получаю ошибку компилятора: невозможно преобразовать из cli::interior_ptr<Type>
в void **
.
Я сделал som исследований в этом, и похоже, что это проблема различных типов указателей в С++ и С++/CLI. Кто-нибудь знает об этом и, возможно, подскажет, как это можно исправить? Thanx заранее!
Во-первых, спасибо за вашу помощь!
Как предложил Фрейх, я попытался использовать pin_ptr
, но вместо этого компилятор жаловался на проблемы с преобразованием из interior_ptr
в pin_ptr
. Если я вместо этого попытаюсь использовать interior_ptr
, как в:
pin_ptr<void *> pinnedPtr = &provider;
CoCreateInstance(CLSID_MSPRProvider, NULL, CLSCTX_LOCAL_SERVER, IID_IMSPRProvider, ( void** )pinnedPtr);
Я получаю не могу конвертировать из interior_ptr
в interior_ptr
.
Все сводится к проблеме преобразования interior_ptr
в void**
. Например: (void**)interiorPtr
, где interiorPtr
, конечно, есть interior_ptr
. Любые идеи в этом?