void MyCoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID FAR* ppv) { if (IsEqualCLSID(rclsid,(REFGUID)CLSID_ShellFSFolder)) { IShellFolder *shellFolder = (IShellFolder*)ppv; //在这里我想知道它是否转换成功了,怎么看,上面这句会引起内存问题吗?,因为写在hook里,不好调试 } CopyCoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, ppv); }
IShellFolder是一个抽象类
IShellFolder *shellFolder = (IShellFolder*)ppv; 这个转换肯定成功,但是没有类型安全保证。
因为它相当于:IShellFolder *shellFolder = static_cast<IShellFolder*>(ppv);
在C++ 0x 之前,没有标准的类型检测机制,之后可以用 dynamic_cast<T>,但是T必须是完整类型。
所以总的来说,你无法判断是否转换成功,如果你需要类型安全的话。
从你的代码看,你这个转换语句写错了,ppv 应该是 IShellFolder ** 类型,而不是 IShellFolder * 类型.
好晕啊,怎么会这样
暂时没有时间做这个功能点了,我想你说的应该是有帮助的,结了