2017-08-18 21 views
0

ライセンスサーバーのcomにアクセスしようとしていますので、IClassFactory2を使用して としています。ここまでのコードはCreateInstanceLicでライセンスされたCOMオブジェクトを取得するには?

// ... 
IClassFactory2 class_factory; 
hr = CoGetClassObject(
    &clsid, 
    CLSCTX_LOCAL_SERVER, 
    NULL, 
    &IID_IClassFactory2, 
    (LPVOID*) &class_factory 
); 
if (hr != S_OK) { return 1; } 
// ... 
hr = class_factory.lpVtbl->CreateInstanceLic(
    &class_factory, 
    NULL, 
    NULL, 
    &IID_IDispatch, 
    key, 
    (LPVOID)&dispatch 
); 
// ... 

ですが、CreateInstanceLicの呼び出しはsegfaultsです。

QueryInterface oleaut32.dll!0x75769edc (Type information missing from symbol file) HRESULT(__stdcall*)(IClassFactory2 *, const _GUID * const, void * *) 
    AddRef 0x00000001 unsigned long(__stdcall*)(IClassFactory2 *) 
    Release 0x00401074 unsigned long(__stdcall*)(IClassFactory2 *) 
    CreateInstance 0x003f67a0 HRESULT(__stdcall*)(IClassFactory2 *, IUnknown *, const _GUID * const, void * *) 
    LockServer 0x003e777c HRESULT(__stdcall*)(IClassFactory2 *, int) 
    GetLicInfo 0x003e7778 HRESULT(__stdcall*)(IClassFactory2 *, tagLICINFO *) 
    RequestLicKey 0x757e60c4 {oleaut32.dll!_gPFactory} HRESULT(__stdcall*)(IClassFactory2 *, unsigned long, wchar_t * *) 
    CreateInstanceLic 0x00000001 HRESULT(__stdcall*)(IClassFactory2 *, IUnknown *, IUnknown *, const _GUID * const, wchar_t *, void * *) 

私はちょっと0x00000001にはCreateInstanceLicが配置されなければならない有効なアドレスではないことを感覚を得る:

Exception thrown at 0x00000001 in consoleapplication1.exe: 0xC0000005: Access violation reading location 0x00000001. 

私は理由がclass_factory.lpVtblはこのようになっていることだと思います。だから私はおそらく何か間違っているが、何がわからない。

答えて

0

だから、次のようになります。

IClassFactory2 * class_factory; 
hr = CoGetClassObject(
    &clsid, 
    CLSCTX_LOCAL_SERVER, 
    NULL, 
    &IID_IClassFactory2, 
    &class_factory 
); 
if (hr != S_OK) { return 1; } 
// ... 
IDispatch * dispatch; 
hr = class_factory.lpVtbl->CreateInstanceLic(
    &class_factory, 
    NULL, 
    NULL, 
    &IID_IDispatch, 
    key, 
    &dispatch 
); 
関連する問題