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

C++ 有没有办法让midl在单独的.h中生成每个接口?,c++,visual-c++,idl,midl,C++,Visual C++,Idl,Midl,我有一堆对象,它们继承从idl文件生成的抽象接口。使用这些接口的每个对象都包含相同的文件接口.h,其中包含所有生成C++映射到IDL接口的抽象类。 每次我将任何内容更改为interfaces.idl时,依赖于它的每个类都必须重新生成,因为interfaces.h发生了更改。是否有一个标志或东西告诉midl在自己的.h中生成每个抽象类?我能想到的唯一方法是将每个接口放在自己的IDL文件中,或者根据变化率将它们划分为多个IDL 然后将这些接口IDL包括(或者是导入——我忘了)到主库IDL中,如果需要

我有一堆对象,它们继承从idl文件生成的抽象接口。使用这些接口的每个对象都包含相同的文件接口.h,其中包含所有生成C++映射到IDL接口的抽象类。
每次我将任何内容更改为interfaces.idl时,依赖于它的每个类都必须重新生成,因为interfaces.h发生了更改。是否有一个标志或东西告诉midl在自己的.h中生成每个抽象类?

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


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

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

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

这是可能的,但不是很容易做到,因为我在应用程序中集成了typelib。为每个库添加一个单独的库将是痛苦的。Midl拥有分割.h所需的一切,我希望有人能给我魔法工具的魔法标志来完成。应该只需要一个类型库——有一个主IDL,其中包含每个接口IDL和库块。这对你不管用吗?我应该仔细阅读,这正是我需要的。谢谢