接口描述中接口方法的预定义参数列表

list of predef-ed params for an interface method inside the interface description

本文关键字:接口 参数 列表 预定义 方法 描述      更新时间:2023-10-16

情况:我正在编写一个看起来像 COM 接口

MIDL_INTERFACE(/*....*/)
IFace : IUnknown
{
STDMETHOD_(void, Foo)(int param) PURE;
};

该接口应该只在我的项目中使用,在几个编译单元中使用,不应该放在 idl 文件中。int param应该以逻辑"OR"的方式使用

IFace* p;
p->Foo( param1 | param2 | param3 );

参数值列表是静态预定义的,不应在程序执行期间修改。

问题是:如何定义参数列表?IFace接口描述应该放在已经包含多接口描述(硬遗留)的文件中,这个文件包含在整个项目的许多地方。所以,我想在接口类本身中定义参数列表。

IFace : IUnknown
{
/*somehow define list of param for Foo here*/
STDMETHOD_(void, Foo)(int param) PURE;
};

并以一种Foo( IFace::param1 | IFace::param2 );的方式使用它.我想将参数列表作为static const变量,但我不喜欢将变量放在接口类中的想法。我不能用枚举来做,因为我需要用逻辑OR来做。

除了完全重组包含文件之外,对这种情况有什么好的建议吗?

您可以使用枚举:

IFace : IUnknown
{
enum { Param1 = 0x1, Param2 = 0x2, Param3 = 0x4, Param4 = 0x8 ... etc.
STDMETHOD_(void, Foo)(int param) PURE;
};
// usage
Foo( IFace::Param1 | IFace::Param2 );

您可以添加参数的组合:

enum { Param1 = 0x1, Param2 = 0x2, Param1_and_2 = Param1 | Param2, ... etc.
//usage
Foo( IFace::Param1_and_2 );