我遇到了将C++/CLI指针转换为本机C++指针的问题.下面是背景:我正在使用C++/CLI编写一个Windows窗体应用程序.该应用程序调用许多COM接口.当通过COM接口创建对象的实例(在C++/CLR类的内部)时,我(void**)(&provider)作为最后一个参数传入CoCreateInstance,如:
HRESULT CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, (void**)(&provider));
Run Code Online (Sandbox Code Playgroud)
但是,我得到编译器错误:无法转换cli::interior_ptr<Type>为void **.我已经对此进行了研究,看起来它是C++和C++/CLI中不同类型指针的问题.任何人都对此有任何了解,也许有关如何修复它的提示?Thanx提前!
首先,感谢你的帮助!
作为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);
Run Code Online (Sandbox Code Playgroud)
我得到无法转换interior_ptr为interior_ptr.这一切都归结到转换的问题interior_ptr来void**.就像这样:(void**)interiorPtr,其中interiorPtr当然是interior_ptr.这有什么想法吗?