2017-10-31 34 views
-2

COM Service(EXE)をテストしますが、HRESULTCoCreateInstanceから取得できません。CoCreateInstanceメソッドで問題が発生しました

私のCOMサンプルは'ATLCOMService'マイクロソフトのサンプルです。それを修正するには?

とクライアントのコードは次のとおりです。ヘッダファイル内

void main() 
    { 
     HRESULT   hr; 
     ISimpleObject *IFirstATL = NULL; 

     hr = CoInitialize(0); 
     if (SUCCEEDED(hr)) 
     { 
      hr = CoCreateInstance(CLSID_SimpleObject, NULL, 
       CLSCTX_LOCAL_SERVER, 
       LIBID_ATLCOMServiceLib, (void**)&IFirstATL); 
      //hr is: E_NOINTERFACE No such interface supported. 

      hr = CoCreateInstance(CLSID_SimpleObject, NULL, 
       CLSCTX_INPROC_SERVER, 
       LIBID_ATLCOMServiceLib, (void**)&IFirstATL); 
      //hr is: REGDB_E_CLASSNOTREG Class not registered 

      if (SUCCEEDED(hr)) 
      { 
       BSTR str; 
       IFirstATL->HelloWorld(&str); 
       cout << str << endl; 

       IFirstATL->Release(); 
      } 
      else 
      { 
       cout << "CoCreateInstance Failed." << endl; 
      } 
     } 
     CoUninitialize(); 
    } 

とIDです:

#ifndef CLSID_DEFINED 
    #define CLSID_DEFINED 
    typedef IID CLSID; 
    #endif // CLSID_DEFINED 

    #define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ 
      const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} 

    #endif !_MIDL_USE_GUIDDEF_ 

    MIDL_DEFINE_GUID(IID, 
    IID_ISimpleObject,0x1B877090,0x76CD,0x4EDE,0x81,0x15,0xEC, 
    0x4C,0xCD,0x96,0x76,0xF3); 


    MIDL_DEFINE_GUID(IID, LIBID_ATLCOMServiceLib,0xCC2CA6F0,0x2220,0x4D77,0xBA, 
    0x46,0x4B,0xCB,0x62,0x15,0x6A,0x28); 


    MIDL_DEFINE_GUID(IID, DIID__ISimpleObjectEvents,0x7DACF5E9,0x2885,0x4E4E, 
    0x83,0xDD,0xCA,0x6C,0xC3,0xA8,0x8B,0x6D); 


    MIDL_DEFINE_GUID(CLSID, 
    CLSID_SimpleObject,0x388F1C82,0xED00,0x4966,0x95,0x90, 
    0x02,0xF6,0xB9,0xCC,0xA4,0x1B); 

    #undef MIDL_DEFINE_GUID 

    #ifdef __cplusplus 
    } 
    #endif 

以下でレジストリインスタンスおよびサービスのステータスを見た:

レジストリ - CLSID:

Registry - CLSID

レジストリ - 型ID:

Registry - typeid

と サービスステータス:

Service status

+0

あなたの質問は何ですか? –

+0

なぜ私はCoCreateInstanceがこれらの結果を返すのか?それを修正する方法は? – Dev

+1

結果を返しますか? –

答えて

2
 hr = CoCreateInstance(CLSID_SimpleObject, 
      NULL, 
      CLSCTX_LOCAL_SERVER, 
      LIBID_ATLCOMServiceLib, // <<--- IID_ISimpleObject here? 
      (void**)&IFirstATL); 
     //hr is: E_NOINTERFACE No such interface supported. 

注四番目の引数は、あなたが要求しているインタフェースのIIDことになっていること、おそらくIID_ISimpleObjectです。 APIの返されるエラーコードは、正しいインターフェイスを要求するかどうかを確認することを示唆しています:E_NOINTERFACE(正しい場合は、サーバーが間違って実装していないか、またはマーシャリングの問題です)。

関連する問題