none
RichEdit中插入的Atl控件复制之后变成图片对象了? RRS feed

  • 问题

  • 
    
    
    自己做了一个Atl控件用来显示GIF图片,因为不想以管理员权限注册,所以改变了CoCreateInstance的方式,
    直接加载动态链接库进行创建,但是这种方式创建的OLE对象,复制,然后粘帖,变成一个CLSID_Picture的对象了
    
    刚开始以为复制对象再粘帖的时候会调用OLE32的CoCreateInstance函数,但我
    HOOK这个函数发现没有调用。求解下在哪个环节出现的问题呢,各位给个思路?
    


    if (hModDynamicGif == NULL)
                return FALSE;  
            FuncDllGetClassObject func = (FuncDllGetClassObject)GetProcAddress (hModDynamicGif, "DllGetClassObject");  
            if (func == NULL)
                return FALSE;  
            IClassFactory* pFactory=NULL;
            func (__uuidof (DynamicGif), IID_IClassFactory, (void**)&pFactory);  
            if (pFactory == NULL)
                return FALSE;  
     
            hr = pFactory->CreateInstance (NULL, __uuidof(IDynamicGif), (void**)&lpDynamicGif);  
            pFactory->Release();
    

    不注册控件进行调用,及HOOK创建的函数
    参考下面这个博客

    http://www.cnblogs.com/marryZhan/archive/2012/04/05/2497552.html

    本问题也在CSDN上贴了,没应呀

    2012年8月4日 7:45

全部回复

  • 另外ATL控件的FinalRelease 只会在程序退出的时候 才被调用,  在删除这个对象的时候(DeleteObject) 并没有被调用 , 为什么呢?  这样浪费资源了,我创建的定时器一直在跑。。
    2012年8月4日 7:46
  • finalrelease调用不到的最大可能就是对象的引用计数未清零,也就是尚有未释放的引用。

    你可以跟踪所有的AddRef()和Release()方法的调用,检查返回的结果,找到不匹配的AddRef()和Release()。

    参考以下链接:http://www.cnblogs.com/leer168/articles/2081422.html

    2012年8月8日 18:20