![](/img/trans.png)
[英]Unable to cast COM object of type '…' to interface type '…' while using an ExeCOMServer
[英]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()
之后才將IMessengerAdvanced
為IMessengerAdvanced
...這與您的代碼有所不同。
由於IMessengerAdvanced
只是IMessenger3
的一部分,它的IMessenger3
取決於服務器端的配置,因此只有在您登錄后才能在運行時使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.