At design-time, license verification proceeds as shown in the following figure:

When a programmer loads the ActiveX designer, the host calls GetLicInfo to verify that the appropriate license is present. If the license is not present, the method returns E_NOTLICENSED and the visual designer is not created. If a license is present or if no license is required, the method creates an instance and returns S_OK.
The following code sample shows how GetLicInfo might be implemented:
STDMETHODIMP CClassFactory::GetLicInfo
(
LICINFO *pLicInfo
)
{
CHECK_POINTER(pLicInfo);
pLicInfo->cbLicInfo = sizeof(LICINFO);
// If true, RequestLicKey will work.
pLicInfo->fRuntimeKeyAvail = g_fMachineHasLicense;
// If true, the standard CreateInstance will work.
pLicInfo->fLicVerified = g_fMachineHasLicense;
return S_OK;
}
After construction of the application is complete, the programmer selects Build or Run.
During this process, the host calls RequestLicKey to get a key to embed into the resulting application. The following sample shows one approach to implementing this method:
STDMETHODIMP CClassFactory::RequestLicKey
(
DWORD dwReserved,
BSTR *pbstr
)
{
// If the machine isn't licensed, don't give this.
if (!g_fMachineHasLicense)
return CLASS_E_NOTLICENSED;
*pbstr = SysAllocString(g_wszLicenseKey);
return (*pbstr) ? S_OK : E_OUTOFMEMORY;
}
As with GetLicInfo, RequestLicKey returns CLASS_E_NOTLICENSED if the license key is not valid.