CommunicatorAPI.MessengerClass'到接口类型'CommunicatorAPI

本文关键字:CommunicatorAPI 接口类型 MessengerClass | 更新日期: 2023-09-27 18:07:07

在遵循多个communicatorAPI指南后,我似乎被卡住了。一般来说,它可以归结为无法将信使对象转换为接口。无论是messenger对象还是messengerclass对象。

在尝试强制转换对象时,收到以下异常:

无法强制转换'CommunicatorAPI '类型的COM对象。MessengerClass'到接口类型'CommunicatorAPI.IMessengerAdvanced'。此操作失败,因为对IID为'{DA0635E8-09AF-480C-88B2-AA9FA1D9DB27}'的接口的COM组件的QueryInterface调用失败,由于以下错误:No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))).

这是我试图运行的代码的一个例子,剥离到只是抛出异常的原因。

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();"运气不好。

无法强制转换'CommunicatorAPI '类型的COM对象。MessengerClass'到接口类型'CommunicatorAPI.IMessengerAdvanced'。此操作失败,因为对IID为'{DA0635E8-09AF-480C-88B2-AA9FA1D9DB27}'的接口的COM组件的QueryInterface调用失败,由于以下错误:No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))).

我对c#非常陌生,而且我对使用communicatorAPI感到停滞不前。顺便说一句,已经添加了参考文献。嵌入选项是假的,我被难住了。不知道有没有人想出了解决办法。

此外,我已经实例化了接口的效果:"msgAdv = msgr as IMessengerWndAdvanced;"运气不好。变量msgAdv每次都为空。我已经尝试了不同的例子从M$和无效。此外,我已经通读了"OCSDK"。SDK附带的帮助文件。没有提到"Exception from HRESULT: 0x80004002 (E_NOINTERFACE)"错误。

帮助吗?

CommunicatorAPI.MessengerClass'到接口类型'CommunicatorAPI

根据这个MSDN页面,Messenger只实现了IMessenger3和DMessengerEvents,所以你不能将你的Messenger对象msgr转换为IMessengerAdvanced。

如果你需要使用IMessengerAdvanced,那么你需要找到一个实现该接口的类。否则,您只能使用IMessenger3接口的方法。

在所有的例子中,我可以发现它是Messenger msgr = new Messenger();,但更重要的是,只有在msgr.AutoSign()被成功调用后,才会转换到IMessengerAdvanced…这与你的代码不同。

由于IMessengerAdvanced只是IMessenger3的一些添加,它的可用性取决于服务器端配置,它只能在您登录后在运行时可用。