2011-08-31 2 views
0

여러 CommunicatorAPI 가이드를 따라 한 후 멈춘 것처럼 보입니다. 일반적으로 메신저 객체를 인터페이스로 사용할 수 없다는 단점이 있습니다. 그것이 메신저 obj 또는 messengerclass obj 클래스이든간에.'CommunicatorAPI.MessengerClass'유형의 COM 개체를 'CommunicatorAPI.IMessengerAdvanced'인터페이스 유형으로 캐스팅 할 수 없습니다.

개체를 형 변환하려고하면 다음 예외가 발생합니다.

Unable to cast COM object of type 'CommunicatorAPI.MessengerClass' to interface type 'CommunicatorAPI.IMessengerAdvanced'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{DA0635E8-09AF-480C-88B2-AA9FA1D9DB27}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

이 코드는 내가 실행하려고 시도한 코드의 예이며, 예외를 throw하는 것으로 제거되었습니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using CommunicatorAPI; 

namespace OCA 
{ 
    class OCA_main 
    { 
     static void Main(string[] args) 
     { 
      OCA m = new OCA(); 
      m.subscribe(); 
      m.startconvo("emailaddress"); 

     } 
    } 

    class OCA 
    { 
     MessengerClass msgr = new MessengerClass(); 
     // Messenger msgr = new Messenger(); //Tried this too... :(

     IMessengerAdvanced msgrAdv; 


     public void subscribe() 
     { 
      msgr.OnIMWindowCreated += new DMessengerEvents_OnIMWindowCreatedEventHandler(msgr_OnIMWindowCreated); 
     } 

     public void unsubscribe() 
     { 
      msgr.OnIMWindowCreated -=new DMessengerEvents_OnIMWindowCreatedEventHandler(msgr_OnIMWindowCreated); 
     } 

     void msgr_OnIMWindowCreated(object pIMWindow) 
     { 
      try 
      { 

       IMessengerAdvanced msgrAdv = (IMessengerAdvanced)msgr; 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("{0}", ex.Message); 
      } 

      throw new NotImplementedException(); 
      //... stuff 
     } 

     public void startconvo(string users) 
     { 
      try 
      { 

       IMessengerAdvanced msgrAdv = (IMessengerAdvanced)msgr; 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("{0}", ex.Message); 
      } 
     } 

    } 
} 

"Messenger msgr = new Messenger();"를 사용하여 위 코드를 시도했습니다. 운이 없다.

Unable to cast COM object of type 'CommunicatorAPI.MessengerClass' to interface type 'CommunicatorAPI.IMessengerAdvanced'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{DA0635E8-09AF-480C-88B2-AA9FA1D9DB27}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

나는 C#을 처음 접했고, 아직 communicatorAPI로 작업하고있다. Btw, 참조가 추가됩니다. Embed 옵션은 false이며 난처하게되었습니다. 누군가가 해결책을 알아 냈는지 궁금합니다.

또한, 나는 "msgAdv = msgr as IMessengerWndAdvanced;"와 같은 인터페이스를 인스턴스화했습니다. " 행운을 빕니다. msgAdv 변수는 매번 null입니다. 나는 M $에서 다른 예제를 시도했지만 아무 소용이 없다. 또한 SDK와 함께 제공된 "OCSDK.chm"도움말 파일을 읽었습니다. "Exception from HRESULT : 0x80004002 (E_NOINTERFACE)"오류에 대한 언급이 없습니다.

도움 말? 당신이 IMessengerAdvanced에 메신저 객체 MSGR 캐스트 할 수 있도록

답변

0

모든 예제에서 나는 Messenger msgr = new Messenger();이지만 더 정확하게 이 호출 된 후 IMessengerAdvanced으로 캐스트가 발생하면 ... 코드와의 차이점이 있습니다. IMessengerAdvanced 이후

IMessenger3에 그냥 몇 가지 추가하고 그것의 가능시기는 로그인 한 후에 만 ​​런타임에 제공 될 수있는 서버 측 구성에 따라 무언가이다. 내 모든 시도에서

+0

, 내가 서명 한 그래서, msgr.SignIn (blah blah) 또는 msgr.AutoSignIn()이 필요하지 않았습니다. 실제로 다시 이렇게하면 통신기가 멈 춥니 다. 그래도 고마워! :) – embeddednerd

+0

오, 나는 MessengerClass를 시도했다 msgr = new MessengerClass(); Messenger msgr = new Messenger()도 비슷한 예외를 던졌습니다. 나는 http://msdn.microsoft.com/en-us/library/bb787245(v=office.12).aspx의 맨 아래 누군가가 MessengerClass가 올바른 클래스라고 제안한다. – embeddednerd

+0

당신의 서버가 필요한 인터페이스를 제공하지 않는 방법으로 구성되었다는 것을 의미합니다 ... 그것은 당신의 코드가 아니지만'IMessengerAdvanced'로 연결되는 서버 설정은 제가 생각한 것입니다 – Yahia

1

MSDN page에 따르면, 메신저 만 IMessenger3 및 DMessengerEvents implments.

IMessengerAdvanced를 사용해야하는 경우 해당 인터페이스를 구현하는 클래스를 찾아야합니다. 그렇지 않으면 IMessenger3 인터페이스의 메서드를 사용하여 붙어 있습니다.

관련 문제