C++ 如何在运行时检查void*是否为IUnknown*?

C++ 如何在运行时检查void*是否为IUnknown*?,c++,windows,C++,Windows,如何在运行时检查void*是否为IUnknown* IUnknown *unk = dynamic_cast<IUnknown*>(item); IUnknown*unk=动态施法(项目); 不工作(编译错误)。您无法在运行时确定这一点。您无法获取任意地址并确定其背后是否有真实的IUnknown。您无法在运行时确定该地址。您不能使用任意地址并确定其背后是否有真正的IUnknown。dynamic\u cast不使用它吗?您所说的“不起作用”是什么意思?您能否详细说明出了什么问题?

如何在运行时检查void*是否为IUnknown*

IUnknown *unk = dynamic_cast<IUnknown*>(item);
IUnknown*unk=动态施法(项目);

不工作(编译错误)。

您无法在运行时确定这一点。您无法获取任意地址并确定其背后是否有真实的
IUnknown

您无法在运行时确定该地址。您不能使用任意地址并确定其背后是否有真正的
IUnknown

dynamic\u cast不使用它吗?您所说的“不起作用”是什么意思?您能否详细说明出了什么问题?RTTI不起作用。IUnknown是一个COM接口。您需要使用COM函数来测试是否将值转换为IUnknown。(可能需要捕获系统异常(使用TIGER和Exchange,而不是使用Testand catch的C++异常)对于指针不是IUnknown的情况。如果IUnknown是标准的Windows COM对象接口,而不是自制的对象接口,请将其标记为Windows。@Stan:真的,这会使它工作……盲目更改指针类型不会使用它吗?你说的“不工作”是什么意思你能详细说明什么地方出了问题吗?RTTI将不起作用。IUnknown是COM接口。你需要使用COM函数来测试是否将值转换为I未知。(并且你可能必须捕获系统异常(使用TIVE和AUTE,而不是使用TIE和CART的C++异常)。对于指针不是iNosik的情况,如果IDENM是标准的Windows COM对象接口而不是本地的,请把它标记为Windows。@斯坦:真的,这会使它有效。盲目地改变指针类型。这是我的猜测。但是我不能明确地说。InOng*实际上不是C++对象指针。它更像是VTAB。事实上,C++是一个C++对象指针,这意味着你在处理不同的领域,不能使用任何一个域的函数来推断另一个领域的任何东西。BTW一个代码> iNoX*< /Cord>不是VTABLE指针,而是一个POIN。这是我的猜测。这是我的猜测。但是我不能肯定地说。InOxNe实际上不是一个C++对象指针。它更像是一个非C++对象的VTABLE PTR。确切地说,你引用的观察实际上是原因。A.Cux:Value*/Cuth>确实是C++对象指针,这意味着你正在处理不同的域和你。无法使用任一域中的函数推断关于另一端的任何信息。顺便说一句,
IUnknown*
不是vtable指针,而是指向vtable指针的指针。