将指针转换为 LPVOID*

cast pointer to pointer as LPVOID*

我有以下代码:

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是正确的选择。通常,从 type* 到 void* 的转换应该隐式完成,而从 void* 到 type* 的转换应该使用 static_cast 完成。但在您的情况下,您正在从类型**转换为 void**,这让您别无选择,只能使用 reinterpret_cast。它仍然比 c 风格的转换有点 "safer",因为你不能抛弃 constness。

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

因此,无论您进行 C 风格转换还是使用 reinterpret_cast,函数只是想在堆中创建对象后将指针值放入变量 "psl"。