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支持程序代碼。 如果屬性是獨立的,則會插入從正確模組類型衍生的類別。 如果將屬性套用至類別,則會新增正確模組類型的基底類別。 正確的類型是由類型參數的值所決定:

範例

下列程式碼示範如何在產生的 .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