MFC ActiveX 控制項: 授權 ActiveX 控制項
授權支援 ActiveX 控制項的選擇性功能讓您控制能夠使用或散佈該控制項。(如其他的授權問題的詳細說明,請參閱中的授權問題升級現有的 ActiveX 控制項。)
本文將告訴您下列主題:
ActiveX 控制授權的概觀
建立一個授權的控制項
授權支援
自訂 ActiveX 控制項的授權
實作授權的 ActiveX 控制項可讓您,為控制項開發人員,以判斷其他人如何使用 ActiveX 控制項。您提供與控制項和。LIC 檔,與採購者但不是可能散佈該控制項,此協議。LIC 檔,以使用該控制項的應用程式。如此可避免撰寫新的應用程式使用一個控制項,而不需從您的控制項第一授權該應用程式的使用者。
ActiveX 控制授權的概觀
對於 ActiveX 控制項,提供授權的支援 COleObjectFactory 類別會提供幾個函式中的實作 IClassFactory2 介面: IClassFactory2::RequestLicKey, IClassFactory2::GetLicInfo,以及 IClassFactory2::CreateInstanceLic。容器應用程式開發人員發出要求,以建立控制項,呼叫的執行個體時GetLicInfo由以確認該控制項。LIC 檔則會出現。如果控制項授權而可以建立並放置在容器中控制項的執行個體。開發人員建構收納器應用程式完成後,另一個函式呼叫時,這次RequestLicKey,會進行。這個函數會傳回該容器應用程式的授權識別碼 (單純的字元字串)。傳回的識別碼接著會嵌入應用程式中。
下圖將說明授權確認的收納器應用程式的開發過程中會使用 ActiveX 控制項。前面提過,容器應用程式開發人員必須要有正確。LIC 檔安裝在開發用來建立控制項的執行個體的電腦上。
驗證已授權的 ActiveX 控制項在開發期間
下一步中的程序,如下圖中,會發生於使用者執行容器應用程式。
應用程式啟動時,控制項的執行個體通常需要建立。這樣的容器優勢呼叫CreateInstanceLic,做為參數傳遞嵌入的授權識別碼。字串比較就可嵌入的授權識別碼和控制項自己的複製之間的授權識別碼。比對成功時,會建立控制項的執行個體,以及應用程式會繼續正常地執行。請注意,。LIC 檔不需要存控制使用者的機器上。
驗證已授權的 ActiveX 控制項在執行期間
控制項授權包含兩個基本元件: 控制項實作 DLL 中的特定程式碼和授權檔案。程式碼被由兩個 (或三個) 函式呼叫和字元字串,以下一概稱為 「 授權字串 」,包含著作權注意事項。在控制項實作中找到這些呼叫和授權字串 (。Cpp)。ActiveX 控制項精靈] 中,所產生的授權檔案是一個著作權聲明的文字檔。之所以稱為以與該專案名稱。LIC 副檔名,例如範例。LIC。已授權的控制項必須視設計階段使用伴隨的授權檔。
建立一個授權的控制項
當您使用 ActiveX 控制項精靈來建立控制項架構時,很容易就能包含授權支援。當您指定控制項應該有執行階段授權時,ActiveX 控制項精靈會將程式碼加入控制項類別來支援授權。程式碼是由使用識別碼和授權的檔案進行授權確認的函式所組成。這些函式也可以修改來自訂控制項授權。如需有關授權自訂的詳細資訊,請參閱自訂 ActiveX 控制項的授權本文件稍後。
若要新增授權使用 ActiveX 控制項精靈,當您建立控制項專案的支援
- 使用中的指示, 建立 MFC 控制項 ActiveX。應用程式設定 ActiveX 控制項精靈] 頁面包含執行階段授權與建立控制項的選項。
ActiveX 控制精靈現在會產生 ActiveX 控制架構,其中包含基本授權支援。授權程式碼的詳細說明,請參閱下一個主題。
授權支援
當您使用 ActiveX 控制項精靈來將授權支援加入至 ActiveX 控制項時,ActiveX 控制項精靈將加入宣告,並實作授權功能的程式碼將加入至控制項標頭檔及實作檔。這段程式碼由所組成的VerifyUserLicense成員函式和GetLicenseKey成員函式,會覆寫預設實作中找到 COleObjectFactory 。這些函式會擷取,並確認該控制項授權。
![]() |
---|
第三個成員函式, VerifyLicenseKey ActiveX 控制項精靈] 中,不會產生,但是可以覆寫自訂授權金鑰的驗證行為。 |
這些成員函式是:
-
驗證控制項可讓設計階段使用方式,藉由檢查系統中存在控制項授權檔案。架構會呼叫此函數過程 IClassFactory2::GetLicInfo 和 IClassFactory::CreateInstanceLic。
-
從控制項 DLL 要求一特定識別碼。此機碼是內嵌在收納器應用程式和更新版本中,配合使用VerifyLicenseKey,以建立控制項的執行個體。架構會呼叫此函數過程 IClassFactory2::RequestLicKey。
-
確認嵌入的識別碼和控制項的唯一索引鍵相同。這可使容器建立供其使用控制項的執行個體。架構會呼叫此函數過程 IClassFactory2::CreateInstanceLic ,且可以提供自訂的驗證的授權識別碼。預設實作會執行字串比較。如需詳細資訊,請參閱自訂 ActiveX 控制項的授權,本文件稍後。
標頭檔的修改
ActiveX 控制項精靈會將下列程式碼置於控制項的標頭檔。在本例中的兩個成員函式CSampleCtrl的物件factory宣告,一是驗證控制項的目前狀態。LIC 檔,另一種會擷取用於內含控制項的應用程式的授權金鑰:
BEGIN_OLEFACTORY(CMyAxUICtrl) // Class factory and guid
virtual BOOL VerifyUserLicense();
virtual BOOL GetLicenseKey(DWORD, BSTR FAR*);
END_OLEFACTORY(CMyAxUICtrl)
實作檔的修改
「 ActiveX 控制精靈 」 會將下列兩個陳述式放在控制項實作檔,來宣告授權檔名和授權字串:
static const TCHAR BASED_CODE _szLicFileName[] = _T("NVC_MFC_AxUI.lic");
static const WCHAR BASED_CODE _szLicString[] = L"Copyright (c) 2006 ";
![]() |
---|
如果您修改 szLicString 以任何方式,您也必須修改控制項中的第一行。LIC 檔或授權將無法正常執行。 |
ActiveX 控制項精靈會將下列程式碼置於控制項實作檔,以定義控制項類別的VerifyUserLicense和GetLicenseKey函式:
// CMyAxUICtrl::CMyAxUICtrlFactory::VerifyUserLicense -
// Checks for existence of a user license
BOOL CMyAxUICtrl::CMyAxUICtrlFactory::VerifyUserLicense()
{
return AfxVerifyLicFile(AfxGetInstanceHandle(), _szLicFileName, _szLicString);
}
// CMyAxUICtrl::CMyAxUICtrlFactory::GetLicenseKey -
// Returns a runtime licensing key
BOOL CMyAxUICtrl::CMyAxUICtrlFactory::GetLicenseKey(DWORD /*dwReserved*/,
BSTR FAR* pbstrKey)
{
if (pbstrKey == NULL)
return FALSE;
*pbstrKey = SysAllocString(_szLicString);
return (*pbstrKey != NULL);
}
最後, ActiveX 控制項精靈修改控制項專案。IDL 檔。授權關鍵字加入至 coclass 的宣告的控制項,如下例所示:
[ uuid(913E450B-E720-4C71-BCDF-71C96EE98FEB), licensed,
helpstring("MyAxUI Control"), control ]
coclass NVC_MFC_AxUI
自訂 ActiveX 控制項的授權
因為VerifyUserLicense, GetLicenseKey,以及VerifyLicenseKey宣告為虛擬成員函式的控制 factory 類別中,您可以自訂控制項的授權行為。
比方說,您可以提供多層級的授權控制項,藉由覆寫VerifyUserLicense或VerifyLicenseKey成員函式。在這個函式中,您無法調整您偵測到的授權層級對使用者公開哪些屬性和方法。
您也可以加入程式碼,以VerifyLicenseKey函式會提供自訂的方法,告知使用者此控制建立已失敗。舉個例說,在您VerifyLicenseKey成員函式,您可利用來顯示一則訊息方塊指出該控制項無法初始化及原因。
![]() |
---|
若要自訂 ActiveX 控制項授權確認的另一個方法是檢查特定的登錄機碼,而非電話系統註冊資料庫AfxVerifyLicFile。如需預設實作的範例,請參閱實作檔的修改一節。 |
額外的授權問題的詳細討論,請參閱授權的問題,在升級現有的 ActiveX 控制項。