We recommend using Visual Studio 2017

Class Factories and Licensing

 

The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at Class Factories and Licensing.

To create an instance of your OLE control, a container application calls a member function of the control's class factory. Because your control is an actual OLE object, the class factory is responsible for creating instances of your control. Every OLE control class must have a class factory.

Another important feature of OLE controls is their ability to enforce a license. ControlWizard allows you to incorporate licensing during the creation of your control project. For more information on control licensing, see the article ActiveX Controls: Licensing An ActiveX Control.

The following table lists several macros and functions used to declare and implement your control's class factory and to license of your control.

Class Factories and Licensing

DECLARE_OLECREATE_EXDeclares the class factory for an OLE control or property page.
IMPLEMENT_OLECREATE_EXImplements the control's GetClassID function and declares an instance of the class factory.
BEGIN_OLEFACTORYBegins the declaration of any licensing functions.
END_OLEFACTORYEnds the declaration of any licensing functions.
AfxVerifyLicFileVerifies whether a control is licensed for use on a particular computer.

Declares a class factory and the GetClassID member function of your control class.

DECLARE_OLECREATE_EX(class_name)   

Parameters

class_name
The name of the control class.

Remarks

Use this macro in the control class header file for a control that does not support licensing.

Note that this macro serves the same purpose as the following code sample:

   BEGIN_OLEFACTORY(CMyAxCtrl)
   END_OLEFACTORY(CMyAxCtrl)

Implements your control's class factory and the GetClassID member function of your control class.

IMPLEMENT_OLECREATE_EX(
   class_name,   
    external_name,    
    l,   
    w1,   
    w2,   
    b1,   
    b2,   
    b3,   
    b4,   
    b5,   
    b6,   
    b7,
    b8)   

Parameters

class_name
The name of the control property page class.

external_name
The object name exposed to applications.

l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8
Components of the class's CLSID. For more information on these parameters, see the Remarks for [IMPLEMENT_OLECREATE]--brokenlink--(../Topic/not%20found.md#implement_olecreate.

Remarks

This macro must appear in the implementation file for any control class that uses the DECLARE_OLECREATE_EX macro or the BEGIN_OLEFACTORY and END_OLEFACTORY macros. The external name is the identifier of the OLE control that is exposed to other applications. Containers use this name to request an object of this control class.

Begins the declaration of your class factory in the header file of your control class.

BEGIN_OLEFACTORY(class_name)  

Parameters

class_name
Specifies the name of the control class whose class factory this is.

Remarks

Declarations of class factory licensing functions should begin immediately after BEGIN_OLEFACTORY.

Ends the declaration of your control's class factory.

END_OLEFACTORY(class_name)   

Parameters

class_name
The name of the control class whose class factory this is.

Call this function to verify that the license file named by pszLicFileName is valid for the OLE control.

BOOL AFXAPI AfxVerifyLicFile(
    HINSTANCE  hInstance,  
    LPCTSTR  pszLicFileName,  
    LPOLESTR  pszLicFileContents,  
    UINT cch = -1); 

Parameters

hInstance
The instance handle of the DLL associated with the licensed control.

pszLicFileName
Points to a null-terminated character string containing the license filename.

pszLicFileContents
Points to a byte sequence that must match the sequence found at the beginning of the license file.

cch
Number of characters in pszLicFileContents.

Return Value

Nonzero if the license file exists and begins with the character sequence in pszLicFileContents; otherwise 0.

Remarks

If cch is – 1, this function uses:

         _tcslen(pszLicFileContents);

Macros and Globals

Show: