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)"错误。
帮助吗?
根据这个MSDN页面,Messenger只实现了IMessenger3和DMessengerEvents,所以你不能将你的Messenger对象msgr转换为IMessengerAdvanced。
如果你需要使用IMessengerAdvanced,那么你需要找到一个实现该接口的类。否则,您只能使用IMessenger3接口的方法。
在所有的例子中,我可以发现它是Messenger msgr = new Messenger();
,但更重要的是,只有在msgr.AutoSign()
被成功调用后,才会转换到IMessengerAdvanced
…这与你的代码不同。
由于IMessengerAdvanced
只是IMessenger3
的一些添加,它的可用性取决于服务器端配置,它只能在您登录后在运行时可用。