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

时间:2009-07-17 09:53:22

标签: c++ visual-c++ idl midl

我有一堆对象继承了从idl文件生成的抽象接口。使用这些接口的每个对象都包含相同的文件interfaces.h,其中包含映射到idl接口的所有c ++生成的抽象类。

每次我将任何内容更改为interfaces.idl时,每个依赖于此的类都必须重建,因为interfaces.h会发生变化。是否有一个标志或某事告诉midl在自己的.h?

中生成每个抽象类

2 个答案:

答案 0 :(得分:1)

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

然后将(或者它是#import - 我忘了)这些接口IDL放入主库IDL中,如果需要,它将生成类型库。

答案 1 :(得分:1)

以下是有关如何组织idl以生成单独的.h文件和单个typelib的示例。正确的指令是导入的。

<强> main.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;
}

<强> frag1.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();
};

<强> frag2.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();
};