小弟所做的COM库中,在逻辑上只有一个类A是允许用户创建,其他的只是接口。
这些接口指针,用户可以通过调用A的方法获得。
小弟对ATL不熟悉,只会用"ATL Object"向导,结果向导为每个接口都生成了一个类。
能够控制它只生成接口吗?如果是自己从接口interface xxx{...}继承的话,就需要自己做AddRef, Release, QueryInterface, ...,还有要自己做注册,注销,……,太麻烦了:)

解决方案 »

  1.   

    好像AddRef,Realease,QueryInterface这些ATL都已经帮你做了吧,如果不用ATL,这些就得自己做了。
      

  2.   

    很简单,如果你不希望用户创建类只要将一些宏去掉就可以了。
    查找工程中的OBJECT_ENTRY,将相应的代码去掉就可以了。
      

  3.   

    to:sandygull(菠萝菠萝密) 朋友,
    我已经去掉了,可是在注册表中还是注册了一个类,只是用户不能创建这个类的对象还有什么办法吗?谢谢
      

  4.   

    我自己的,我只是想为我的组件加个
    支持查询是否支持某文件后缀的接口
    #pragma once#ifndef __CDIGUIDS_DEFINED
    #define __CDIGUIDS_DEFINED#ifndef __REQUIRED_RPCNDR_H_VERSION__
    #define __REQUIRED_RPCNDR_H_VERSION__ 440
    #endif#include "rpc.h"
    #include "rpcndr.h"#ifndef __RPCNDR_H_VERSION__
    #error this stub requires an updated version of <rpcndr.h>
    #endif // __RPCNDR_H_VERSION__#ifndef COM_NO_WINDOWS_H
    #include "windows.h"
    #include "ole2.h"
    #endif /*COM_NO_WINDOWS_H*/EXTERN_C const CLSID CLSID_FileSourceCDI;
    EXTERN_C const IID IID_ICDIExt;// interface ICDIExt, for extend of filter
    // [unique][uuid][object]
    MIDL_INTERFACE("413DBEFC-C09C-4f4f-A268-6020A4E41A61")
    ICDIExt : public IUnknown
    {
    public:
    // support this format extension?
        virtual HRESULT STDMETHODCALLTYPE IsExtensionSupport(LPCOLESTR pszExt) = 0;
    };
    #endif
      

  5.   

      你不想要CoClass,那么你就在已有的CoClass中自己添加接口
      不就得了~~  你将OBJECT_ENTRY删除,注册表中,当然还有信息.
      因为那是由.reg决定的
      想没有信息,删除.reg文件中的相关内容即可.  但是,我感觉你的问题好怪.
      想要接口,不想要CoClass,
      真的不太懂你的意图~~
      不在dll中注册CoClass,那么CoClass的接口有什么用啊~~
      

  6.   

    同意楼上,
    光有接口,没有接口的实现类,你怎么实例化你的com对象呢.//纯虚类不能被实例化.
    至少有一个实现类来实现你的接口.你定义接口后,只要在coclass里添加该接口,就应该不会有问题的.
      

  7.   

    他是想在一个Com对象中实多个接口,或者在本Com对象中实现在其它Com中定义而没有实现的接口.
    对于第一种,我想你可先加入两个ATL对象,再编译一下,然后在一个对象上按右键,选"Implement Interface",然后在对话框中选种另个接口,即可在同一个对象上实现两个接口.第二种就更简单,不加"编译"步骤即可.个人愚见
      

  8.   


      调用其他CoClass的方法,必须聚合或者包容的.  在一个CoClass中实现多接口,自己在.idl文件中
      添加描述、在.h和.cpp文件中,再简单的加入
      :public ComInterface
      COM_INTERFACE_ENTRY(IComInterface)