Midl に各インターフェイスを個別の .h で生成させる方法はありますか?
-
16-09-2019 - |
質問
idl ファイルから生成された抽象インターフェイスを継承するオブジェクトが多数あります。これらのインターフェイスを使用する各オブジェクトには、idl インターフェイスにマップする C++ で生成されたすべての抽象クラスを含む同じファイルinterfaces.h が含まれています。
何かをinterfaces.idlに変更するたびに、interfaces.hが変更されるため、これに依存するすべてのクラスを再構築する必要があります。それぞれの抽象クラスを独自の .h で生成するように Midl に指示するフラグか何かはありますか?
解決
私は考えることができる唯一の方法は、独自のIDLファイル内の各インターフェイスを置く、または変化率に応じて複数のIDLにそれらを分割することである。
次に含める(またはそれが#IMPORTである - 私は忘れて)、タイプライブラリを生成しますメインライブラリIDL、にこれらのインターフェースのIDLあなたがそれを必要とする場合は、
。他のヒント
ここでは、idl を整理して個別の .h ファイルと単一の typelib を生成する方法のサンプルを示します。正しいディレクティブは 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;
}
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();
};
所属していません StackOverflow