代码之家  ›  专栏  ›  技术社区  ›  Emmanuel Caradec

有没有办法让MIDL在单独的.h中生成每个接口?

  •  0
  • Emmanuel Caradec  · 技术社区  · 16 年前

    我有许多对象继承从IDL文件生成的抽象接口。使用这些接口的每个对象都包含相同的文件接口.h,其中包含所有映射到IDL接口的C++生成的抽象类。

    每次我将任何内容更改为interfaces.idl时,依赖于它的每个类都必须重新生成,因为interfaces.h会更改。是否有一个标志或什么东西告诉MIDL在自己的.h中生成每个抽象类?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Kim Gräsman    16 年前

    我能想到的唯一方法是将每个接口放在自己的IDL文件中,或者根据变化率将它们划分为多个IDL。

    然后将这些接口IDL包含(或者它是import——我忘记了)到主库IDL中,如果需要,它将生成类型库。

        2
  •  1
  •   Emmanuel Caradec    16 年前

    下面是一个关于如何组织IDL生成单独的.h文件和单个typelib的示例。正确的指令是import。

    MID.IDL

    import "oaidl.idl";
    import "ocidl.idl";
    
    import "frag1.idl";
    import "frag2.idl";
    
    [
        uuid(1BECE2AF-2792-49b9-B133-BBC89C850D6F),
        version(1.0),
        helpstring("Bibliothèque de types")
    ]
    library Library
    {
        importlib("stdole2.tlb");
    
        interface IFrag1;
        interface IFrag2;
    }
    

    FLAG1.IDL

    import "oaidl.idl";
    import "ocidl.idl";
    
    [
        object,
        uuid(9AEB517B-48B9-4628-8DD3-4A0BA8D39BEF),
        dual,
        nonextensible,
        helpstring("Interface IFrag1"),
        pointer_default(unique)
    ]
    interface IFrag1 : IDispatch {
        HRESULT frag1();
    };
    

    FLAX2.IDL

    import "oaidl.idl";
    import "ocidl.idl";
    
    [
        object,
        uuid(D60835D4-E1B1-40fb-B583-A75373EF15BE),
        dual,
        nonextensible,
        helpstring("Interface IFrag2"),
        pointer_default(unique)
    ]
    interface IFrag2 : IDispatch {
        HRESULT frag2();
    };