【发布时间】:2010-11-19 06:03:40
【问题描述】:
我遇到了将 C++/CLI 指针转换为本机 C++ 指针的问题。这是背景:
我正在使用 C++/CLI 编写一个 Windows 窗体应用程序。应用程序调用多个 COM 接口。通过 COM 接口创建对象的实例(在 C++/CLR 类内部)时,我将 (void**)(&provider) 作为最后一个参数传递给 CoCreateInstance,如下所示:
HRESULT CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, (void**)(&provider));
但是,我收到编译器错误:无法从 cli::interior_ptr<Type> 转换为 void ** 。
我对此进行了一些研究,看起来这是 C++ 和 C++/CLI 中不同类型指针的问题。任何人都对此有任何了解,也许有关于如何修复它的提示?提前谢谢!
首先,感谢您的帮助!
正如 Freich 建议的那样,我尝试使用 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。有什么想法吗?
【问题讨论】: