// 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;
}