ライセンス付きCOMコンポーネントの作成[MFC]

(2001.01.01)
// MFC\SRC\OCCSITE.CPPよりコピー
//AFX_STATIC HRESULT AFXAPI _AfxCoCreateInstanceLic(REFCLSID clsid, LPUNKNOWN pUnkOuter,
// DWORD dwClsCtx, REFIID iid, LPVOID* ppv, BSTR bstrLicKey)
static HRESULT AFXAPI _AfxCoCreateInstanceLic(REFCLSID clsid, LPUNKNOWN pUnkOuter,
    DWORD dwClsCtx, REFIID iid, LPVOID* ppv, BSTR bstrLicKey)
{
    HRESULT hr;
    
    if (bstrLicKey == NULL)
    {
        LPCLASSFACTORY pClassFactory = NULL;
        
        if (SUCCEEDED(hr = CoGetClassObject(clsid, dwClsCtx, NULL, IID_IClassFactory,
             (void**)&pClassFactory)))
        {
            ASSERT(pClassFactory != NULL);
            hr = pClassFactory->CreateInstance(pUnkOuter, iid, ppv);
            pClassFactory->Release();
        }
    }
    else
    {
        LPCLASSFACTORY2 pClassFactory = NULL;
        
        if (SUCCEEDED(hr = CoGetClassObject(clsid, dwClsCtx, NULL,
            IID_IClassFactory2, (void**)&pClassFactory)))
        {
            ASSERT(pClassFactory != NULL);
            hr = pClassFactory->CreateInstanceLic(pUnkOuter, NULL, iid, bstrLicKey, ppv);
            pClassFactory->Release();
        }
    }
    
    return hr;
}
 
AFX_STATIC HRESULT AFXAPI _AfxCoCreateInstanceLic(LPCTSTR pszClsID, LPUNKNOWN pUnkOuter,
DWORD dwClsCtx, REFIID iid, LPVOID* ppv, LPCTSTR pszLicKey)
{
    CLSID clsid;
    HRESULT hResult = AfxClassIDFromString(pszClsID, &clsid);
    if( FAILED(hResult) )
    {
        return( hResult );
    }
    
    _bstr_t bstrLicKey = pszLicKey;
    hResult = _AfxCoCreateInstanceLic(clsid, pUnkOuter, dwClsCtx, iid, ppv, bstrLicKey);
    
    return( hResult );
}
 
// MFC\SRC\FILECORE.CPP(445)
CString AFXAPI AfxStringFromCLSID(REFCLSID rclsid)
{
    TCHAR szCLSID[256];
    wsprintf(szCLSID, _T("{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"),
    rclsid.Data1, rclsid.Data2, rclsid.Data3,
    rclsid.Data4[0], rclsid.Data4[1], rclsid.Data4[2], rclsid.Data4[3],
    rclsid.Data4[4], rclsid.Data4[5], rclsid.Data4[6], rclsid.Data4[7]);
    return szCLSID;
}
 
// MFC\SRC\OLEDISP2.CPP(28)
HRESULT AFXAPI AfxClassIDFromString(LPCTSTR lpsz, LPCLSID lpClsID)
{
    USES_CONVERSION;
    
    HRESULT hr;
    if (lpsz[0] == '{')
        hr = CLSIDFromString((LPOLESTR)T2COLE(lpsz), lpClsID);
    else
        hr = CLSIDFromProgID(T2COLE(lpsz), lpClsID);
    return hr;
}
一覧に戻る
© 2003 WAC.com All Right Reserved.