VC2012创建ATL的工程。工程创建好以后增加ATL类,选择简单对象。那么这就等于是添加一个ATL的组件。这个组件里面有一个接口,可以用界面提供的菜单给这个接口增加方法。如果我再创建一个ATL类型,那么相当于给当前com dll增加一个新的组件。问题: 我如何能在不增加组件的情况下,给一个组件增加新的interface? 我看网上的例子都是要手工修改一堆代码,有好几个地方要改,不能遗漏了。难道VC的界面里面不能建立新的接口么?如果可以做到的话,怎么做呢?

解决方案 »

  1.   

    http://msdn.microsoft.com/zh-cn/library/vstudio/a13k084h.aspxVisual Studio 不提供向项目添加接口的向导。  通过使用 ATL 简单对象向导添加简单对象,可向 ATL 项目或向“向 MFC 项目添加 ATL 支持”添加接口。 或者,可打开项目的 .idl 文件并通过键入以下内容创建接口: 
      

  2.   

    对于ATL简单对象,我们可以通过在类视图里对它的实现类(注:不是接口,既CXXXX,而非IXXXX)右键,添加-》实现接口完成。
      

  3.   


    如何向已经存在的ATL对象添加一个新的接口呢?
      

  4.   


    你说的这个方法并,不能用来在已经存在的ATL组件简单对象当中,增加一个新的interface啊
      

  5.   

    先手动在idl文件中添加你所需要的interface,定义方式跟一般的接口定义方式一样,需要定义uuid那些东西,如:
    #include "olectl.h"
    import "oaidl.idl";
    import "ocidl.idl";[
        object,
        uuid(76A94E3C-91DC-496A-87A4-97AE8E201AF7),
        dual,
        nonextensible,
        helpstring("IMyATLTest Interface"),
        pointer_default(unique)
    ]
    interface IMyATLTest : IDispatch{
    };[
        object,
        uuid(7E659BB1-FB79-4188-9661-65CA22B6A3E6), // 这个 IID 可以用 GUDIGEN.EXE 产生
        dual,
        nonextensible,
        helpstring("IMyATLTest Interface"),
        pointer_default(unique)
    ]
    interface ICallBack:IDispatch
    {
        [helpstring("method MyCall")] HRESULT MyCall(void);
    };
    [
        uuid(C407F413-A590-4DCB-A092-F3811AE597DB),
        version(1.0),
        helpstring("ATLTest 1.0 Type Library")
    ]
    library ATLTestLib
    {
        importlib("stdole2.tlb");
        [
            uuid(1E3574CA-C860-420D-8CB9-FA3309B6F383),
            control,
            helpstring("MyATLTest Class")
        ]
        coclass MyATLTest
        {
            [default] interface IMyATLTest;
            interface ICallBack; //手动
        };
    };
    然后再右击类,出现Add->Implement interface...,点击进去后选择刚刚定义的接口就行了
      

  6.   

    呃先新建一个 简单对象,然后删掉相关文件,只剩下idl里面的东西。改的地方就少了