将指针到指针转换为 LPVOID*

cast pointer to pointer as LPVOID*

本文关键字:指针 LPVOID 转换      更新时间:2023-10-16

我有以下代码:

IShellLink* psl;
HRESULT hres = CoCreateInstance(
    CLSID_ShellLink, 
    NULL, 
    CLSCTX_INPROC_SERVER, 
    IID_IShellLink, 
    (LPVOID*)&psl);

它已正确编译。但是我需要用*_cast代替(LPVOID*)&psl.我必须使用什么石膏?

static_cast<LPVOID*>(&psl)生成错误(在 MSVC 2013 中)。

使用reinterpret_cast<LPVOID*>(&psl)是正确的吗?

我认为您可能必须使用reinterpret_cast,因为CoCreateInstance函数的最后一个参数用于输出目的。请参阅此链接:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx

因此,无论您是执行 C 样式强制转换还是使用 reinterpret_cast,该函数都只想在堆中创建对象后将指针值放入变量"psl"中。

是的,reinterpret_cast是正确的选择。通常,从类型*到void*的转换应该是隐式的,而从void*到类型*的转换应该使用static_cast来完成。但在您的情况下,您正在从类型**转换为空白**,这使您别无选择,只能使用reinterpret_cast。不过,它仍然比C型演员表"更安全",因为你不能抛弃恒定性。