簡體   English   中英

無法將類型'CommunicatorAPI.MessengerClass'的COM對象轉換為接口類型'CommunicatorAPI.IMessengerAdvanced'

[英]Unable to cast COM object of type 'CommunicatorAPI.MessengerClass' to interface type 'CommunicatorAPI.IMessengerAdvanced'

在遵循了多個communicatorAPI指南之后,我似乎陷入了困境。 通常,可以歸結為無法將Messenger對象投射為接口。 無論是Messenger obj還是messengerclass obj類。

在嘗試投射對象時,我收到以下異常。

無法將類型“ CommunicatorAPI.MessengerClass”的COM對象轉換為接口類型“ CommunicatorAPI.IMessengerAdvanced”。 該操作失敗是因為由於以下錯誤而導致IID為'{DA0635E8-09AF-480C-88B2-AA9FA1D9DB27}'的接口的COM組件上的QueryInterface調用由於以下錯誤而失敗:不支持此類接口(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.MessengerClass”的COM對象轉換為接口類型“ CommunicatorAPI.IMessengerAdvanced”。 該操作失敗是因為由於以下錯誤而導致IID為'{DA0635E8-09AF-480C-88B2-AA9FA1D9DB27}'的接口的COM組件上的QueryInterface調用由於以下錯誤而失敗:不支持此類接口(HRESULT的異常:0x80004002(E_NOINTERFACE)) 。

我對C#感到非常陌生,並且在使用communicatorAPI時一直處於停滯狀態。 順便說一句,引用添加。 Embed選項為false,這讓我很困惑。 想知道是否有人找到了解決方案。

另外,我還通過以下方式實例化了接口:“ msgAdv = msgr as IMessengerWndAdvanced;” 沒有運氣。 變量msgAdv每次都為null。 我嘗試了從M $到其他示例的嘗試,但均無濟於事。 此外,我已經閱讀了SDK隨附的“ OCSDK.chm”幫助文件。 沒有提到“來自HRESULT的異常:0x80004002(E_NOINTERFACE)”錯誤。

救命?

根據此MSDN頁面Messenger僅實現IMessenger3和DMessengerEvent,因此無法將Messenger對象msgr強制轉換為IMessengerAdvanced。

如果需要使用IMessengerAdvanced,則需要找到實現該接口的類。 否則,您將無法使用IMessenger3接口的方法。

在所有示例中,我都能找到它是Messenger msgr = new Messenger(); 但是更重要的是,僅在成功調用msgr.AutoSign()之后才將IMessengerAdvancedIMessengerAdvanced ...這與您的代碼有所不同。

由於IMessengerAdvanced只是IMessenger3的一部分,它的IMessenger3取決於服務器端的配置,因此只有在您登錄后才能在運行時使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM