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 模組類別、全域實例_AtlModule和進入點函式。 因為專案中有其他屬性,所以請不要停止插入 ATL 程式碼。
name
(選擇性)連結庫區塊的名稱。
version
(選擇性)您想要指派給連結庫區塊的版本號碼。 預設值為 1.0。
uuid
程式庫的唯一識別碼。 如果您省略此參數,將會自動產生程式庫的識別碼。 您可能需要擷取連結庫區塊的 uuid,您可以使用標識碼__uuidof(libraryname )來執行此動作。
lcid
當地語系化參數。 如需詳細資訊,請參閱 lcid 。
control
(選擇性)指定連結庫中的所有共同類別都是控制件。
helpstring
指定類型程式庫。
helpstringdll
(選擇性)設定要用來執行檔字串查閱的.dll檔名。 如需詳細資訊,請參閱 helpstringdll 。
helpfile
(選擇性)類型連結庫的說明檔名稱。
helpcontext
(選擇性) 此類型連結庫的說明識別碼 。
helpstringcontext
(選擇性)如需詳細資訊,請參閱 helpstringcontext 。
hidden
(選擇性)防止顯示整個連結庫。 此用法是與控制項搭配使用。 主機需要建立新的類型程式庫,以包裝控制項與擴充屬性。 如需詳細資訊,請參閱 hidden MIDL 屬性。
restricted
(選擇性)連結庫的成員無法任意呼叫。 如需詳細資訊,請參閱 restricted MIDL 屬性。
custom
(選擇性)一或多個屬性;這類似於 自定義 屬性。 自定義的第一個參數是 屬性的 GUID。 例如:
[module(custom={guid,1}, custom={guid1,2})]
resource_name
.rgs 檔案的字串資源識別碼,用來註冊 DLL、可執行檔或服務的應用程式識別碼。 模組是類型服務時,也可以使用這個引數來取得包含服務名稱之字串的識別碼。
注意
.rgs 檔案以及包含服務名稱的字串應該包含相同的數值。
備註
除非您將 restricted 參數指定給 emitidl,否則任何使用 C++ 屬性的程式中都需要 module 。
除了 module 屬性之外,如果原始程式碼同時使用 dispinterface、 dual、 object或表示 coclass的屬性,則會建立程式庫區塊。
一個 .idl 檔案中只允許一個程式庫區塊。 將會合併原始程式碼中的多個模組項目,並實作最新的參數值。
如果在使用 ATL 的專案內使用此屬性,則屬性的行為會變更。 除了上述行為之外,屬性也會插入正確型別的全域物件和其他 _AtlModule
支持程序代碼。 如果屬性是獨立的,則會插入從正確模組類型衍生的類別。 如果將屬性套用至類別,則會新增正確模組類型的基底類別。 正確的類型是由類型參數的值所決定:
type
= dllCAtlDllModuleT 是當成基底類別和 COM 伺服器所需的標準 DLL 進入點使用。 這些進入點是 DllMain、 DllRegisterServer、 DllUnRegisterServer、 DllCanUnloadNow和 DllGetClassObject。
type
= exeCAtlExeModuleT 是當成基底類別和標準可執行檔進入點 WinMain使用。
type
= serviceCAtlServiceModuleT 是當成基底類別和標準可執行檔進入點 WinMain使用。
type
= unspecified停止插入與 module 屬性相關聯的 ATL 程式碼。
範例
下列程式碼示範如何在產生的 .idl 檔案中建立程式庫區塊。
// cpp_attr_ref_module1.cpp
// compile with: /LD
[module(name="MyLibrary", version="1.2", helpfile="MyHelpFile")];
下列程式碼示範您可以提供自己的函式實作,而函式會出現在因使用 module而插入的程式碼中。 如需檢視插入程式碼的詳細資訊,請參閱 /Fx 。 若要覆寫 module 屬性所插入的其中一個函式,請建立將包含函式實作的類別,並將 module 屬性套用至該類別。
// 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);
}
};
需求
屬性內容 | 值 |
---|---|
適用於 | Anywhere 提供 |
可重複 | No |
必要屬性 | 無 |
無效屬性 | 無 |
如需詳細資訊,請參閱 屬性內容。
另請參閱
IDL 屬性
類別屬性
獨立屬性
Typedef、Enum、Union 和 Struct 屬性
usesgetlasterror
程式庫
helpcontext
helpstring
helpfile
version