【发布时间】:2011-09-01 07:35:55
【问题描述】:
在遵循多个 communicatorAPI 指南后,我似乎陷入了困境。一般来说,它归结为无法将信使对象转换为接口。无论是 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。顺便说一句,添加了引用。嵌入选项是错误的,我很难过。不知道有没有人想出解决办法。
另外,我已经用以下内容实例化了接口:“msgAdv = msgr as IMessengerWndAdvanced;” 没有运气。变量 msgAdv 每次都为空。我尝试了 M$ 的不同示例,但无济于事。此外,我已通读 SDK 附带的“OCSDK.chm”帮助文件。没有提及“HRESULT 异常:0x80004002 (E_NOINTERFACE)”错误。
帮助?
【问题讨论】: