小弟初学COM,向高手请教! 自动化的COM组件为什么没有实现类工厂,AddRef(),QueryInterface(),Release()能给我详细讲讲自动化的COM组件中上面这几个东东是怎么调用的吗?我用ATL写了个COM组件,可以用ASP调用,但是由于在ASP中不能调用Release()函数,不能释放COM对象.
所以我每次执行ASP脚本后都要手动Kill掉dllhost.exe.有什么办法能在ASP脚本中调用完COM对象后释放该对象.谢谢.

解决方案 »

  1.   

    ASP应该是可以自动free object的。你也可以强制free。 将那个object对应的变量设置为null就行了。
      

  2.   

    ATL把这些最常见的COM操作都实现了,你只需要考虑在这个框架上自定义
      

  3.   

    能跟我大概讲讲ATL是怎么实现下面这几个东东吗,谢谢!
    我跟踪了代码,可是没看太明白.类工厂,AddRef(),QueryInterface(),Release()谢谢了!
      

  4.   

    <<深入解析ATL>>三.四.五章很详细
      

  5.   

    在dll的cpp文件中wizard自动生成了一个注册宏,里面就是类工厂和注册代码
    BEGIN_OBJECT_MAP(ObjectMap)
    OBJECT_ENTRY(CLSID_CalcPi, CCalcPi)
    END_OBJECT_MAP()wizard中产生的封装类是基于模板的多重继承,其中一个基类CComObjectRootEx他实现了线程模型和AddRef,Releasetemplate <>
    class CComObjectRootEx<CComSingleThreadModel> : public CComObjectRootBase
    {
    public:
    typedef CComSingleThreadModel _ThreadModel;
    typedef _ThreadModel::AutoCriticalSection _CritSec;
    typedef CComObjectLockT<_ThreadModel> ObjectLock; ULONG InternalAddRef()
    {
    ATLASSERT(m_dwRef != -1L);
    return _ThreadModel::Increment(&m_dwRef);
    }
    ULONG InternalRelease()
    {
    return _ThreadModel::Decrement(&m_dwRef);
    }
    CComObject实现了QueryInterface
      

  6.   

    再次借花献佛
    http://dev.csdn.net/develop/article/13/13924.shtm