Share via


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 屬性之外,如果原始程式碼同時使用 dispinterfacedualobject或表示 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);
   }
};

需求

屬性內容
適用於 任何位置
可重複 No
必要屬性
無效屬性

如需詳細資訊,請參閱 屬性內容

另請參閱

IDL 屬性
類別屬性
獨立屬性
Typedef、Enum、Union 和 Struct 屬性
usesgetlasterror
程式庫
helpcontext
helpstring
helpfile
version