module (C++)
定义.Idl 文件中的库块。
语法
[ module (type=dll, name=string, version=1.0, uuid=uuid, lcid=integer, control=boolean, helpstring=string, helpstringdll=string, helpfile=string, helpcontext=integer, helpstringcontext=integer, hidden=boolean, restricted=boolean, custom=string, resource_name=string,) ];
参数
type
(可选)可以是以下项之一:
dll
添加函数和类,使生成的 DLL 发挥进程内 COM 服务器的功能。 这是默认值。exe
:添加函数和类,使生成的可执行文件发挥进程外 COM 服务器的功能。service
:添加函数和类,使生成的可执行文件发挥 NT 服务的功能。unspecified
:禁用与模块特性相关的 ATL 代码注入:注入 ATL Module 类、全局实例_AtlModule 和入口点函数。 不要禁用该项目中的其他特性的 ATL 代码注入。
name
(可选)库块的名称。
version
(可选)要分配到库块的版本号。 默认值为 1.0。
uuid
库的唯一 ID。 如果省略此参数,ID 将自动为库生成参数。 可能需要检索库块的 uuid,可以使用标识符__uuidof(libraryname)执行此操作。
lcid
本地化参数。 有关详细信息,请参阅 lcid 。
control
(可选)指定库中的所有组件类都为控件。
helpstring
指定类型库。
helpstringdll
(可选)设置要用于执行文档字符串查找的 .dll 文件的名称。 有关详细信息,请参阅 helpstringdll 。
帮助文件
(可选)类型库的帮助文件名称。
helpcontext
(可选)该类型库的帮助 ID。
helpstringcontext
(可选)有关详细信息,请参阅 helpstringcontext。
hidden
(可选)禁止显示整个库。 这种用法与控件一起使用。 主机需要创建新的类型库,该库对控件进行包装,使其具有扩展特性。 更多详细信息,请参阅 隐藏 MIDL 特性。
restricted
(可选)不能随意调用库中的成员。 更多详细信息,请参阅 受限 MIDL 特性。
custom
(可选)一个或多个特性;这类似于自定义特性。 自定义特性的第一个参数是特性的 GUID。 例如:
[module(custom={guid,1}, custom={guid1,2})]
resource_name
用 rgs 文件字符串资源 ID 来注册 DLL、可执行文件或服务应用程序的 APP ID。 模块是服务类型模块时,也使用此参数获取包含服务名称的字符串 ID。
注意
rgs 文件和含服务名称的字符串应包含相同的数字值。
备注
除非指定 受限 参数为 emitidl,在使用 c + + 特性的任何程序时, 模块 是必须的。
将创建库块,如果除了 模块 特性,源代码还使用 dispinterface、 dual、 object或蕴含 coclass的特性。
一个库块只允许一个.idl 文件。 使用正在实施的最新参数值,合并源代码中多个模块条目。
如果在使用 ATL 的项目中使用此属性,该属性的行为将会更改。 除了上述行为,该特性还将插入正确类型和其他支持代码的全局对象(称为 _AtlModule
)。 如果特性是独立的,它将插入从正确的模块类型中派生出来的类。 如果将该特性应用于类,它将添加正确的模块类型的基本类。 正确类型由 type 参数的值决定:
type
= dllCAtlDllModuleT 用作基类,并使用需要 COM 服务器的标准 DLL 入口点。 这些入口点为 DllMain、 DllRegisterServer、 DllUnRegisterServer/ DllCanUnloadNow和 DllGetClassObject。
type
= exeCAtlExeModuleT 用作基类和标准可执行文件的入口点 WinMain。
type
= serviceCAtlServiceModuleT 用作基类和标准可执行文件的入口点 WinMain。
unspecified
type
=禁用与模块特性相关的 ATL 代码注入。
示例
下面的代码演示如何在生成的.idl 文件中创建库块。
// cpp_attr_ref_module1.cpp
// compile with: /LD
[module(name="MyLibrary", version="1.2", helpfile="MyHelpFile")];
下面的代码将演示可以提供函数的实现,因为使用 模型,该函数将在注入代码中显示。 有关查看插入的代码的详细信息,请参阅 /Fx 。 若要重写一项由 模块 特性插入的功能,使用包含实现函数的类,并让 模块 特性应用到该类。
// cpp_attr_ref_module2.cpp
// compile with: /LD /link /OPT:NOREF
#include <atlbase.h>
#include <atlcom.h>
#include <atlwin.h>
#include <atltypes.h>
#include <atlctl.h>
#include <atlhost.h>
#include <atlplus.h>
// no semicolon after attribute block
[module(dll, name="MyLibrary", version="1.2", helpfile="MyHelpFile")]
// module attribute now applies to this class
class CMyClass {
public:
BOOL WINAPI DllMain(DWORD dwReason, LPVOID lpReserved) {
// add your own code here
return __super::DllMain(dwReason, lpReserved);
}
};
要求
特性上下文 | 值 |
---|---|
适用于 | 任何位置 |
可重复 | 否 |
必需的特性 | 无 |
无效的特性 | 无 |
有关详细信息,请参见 特性上下文。
另请参阅
IDL 特性
类特性
独立特性
Typedef、Enum、Union 和 Struct 特性
usesgetlasterror
库
helpcontext
helpstring
帮助文件
version