0
有没有其他的使用以下方法?pin_ptr使用reinterpret_cast或static_cast替代(void **)?
class IGraphBuilder;
public ref class Device
{
private:
IGraphBuilder* pGraphBuilder;
public:
void Configure()
{
pin_ptr<IGraphBuilder*> ppGraphBuilder = &pGraphBuilder;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
NULL,
CLSCTX_INPROC,
IID_IGraphBuilder, (void**)ppGraphBuilder);
reinterpret_cast(ppGraphBuilder)编译但我有点困惑,如果这是正确的这种情况。
如果这不是C++/CLI(其中&NativeMember
实际上意味着interior_ptr<Type>(NativeMember)
)我想简单地使用static_cast<void**>(&pGraphBuilder)
但即使正确地铸造pin_ptr
以下不编译
pin_ptr<IGraphBuilder*> ppGraphBuilder = &pGraphBuilder;
static_cast<void**>(ppGraphBuilder)
有什么解决办法还是我我不得不使用(void **),因为pin_ptr很奇怪?
做,在'C2440错误:“的static_cast”:无法从“IGraphBuilder **”转化为对“无效**”'这个线程会谈同样的问题... http://stackoverflow.com/questions/3625410/c-static-cast-from-float-to-void/ – NtscCobalt 2012-04-24 21:57:36
@NtscCobalt:你说得对。一个人必须为第二个演员使用'reinterpret_cast'。这在技术上并没有改变这个事实,你需要两次转换。 – 2012-04-25 07:28:23
是'reinterpret_cast'在这种情况下可以安全地在第一次投射到'IGraphBuilder **'后使用? –
NtscCobalt
2012-04-25 21:34:46