首页 新闻 搜索 专区 学院

c++中如何判断一个指针是否能转换成一个抽象类?

0
悬赏园豆:20 [已解决问题] 解决于 2013-10-22 17:23
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是一个抽象类
空明流光的主页 空明流光 | 初学一级 | 园豆:62
提问于:2013-10-16 15:35
< >
分享
最佳答案
0

IShellFolder *shellFolder = (IShellFolder*)ppv; 这个转换肯定成功,但是没有类型安全保证。

因为它相当于:IShellFolder *shellFolder = static_cast<IShellFolder*>(ppv);

在C++ 0x 之前,没有标准的类型检测机制,之后可以用 dynamic_cast<T>,但是T必须是完整类型。

所以总的来说,你无法判断是否转换成功,如果你需要类型安全的话。

从你的代码看,你这个转换语句写错了,ppv 应该是 IShellFolder ** 类型,而不是 IShellFolder * 类型.

收获园豆:20
Launcher | 高人七级 |园豆:45045 | 2013-10-17 09:37

好晕啊,怎么会这样

空明流光 | 园豆:62 (初学一级) | 2013-10-17 12:30
其他回答(1)
0

暂时没有时间做这个功能点了,我想你说的应该是有帮助的,结了

空明流光 | 园豆:62 (初学一级) | 2013-10-22 17:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册