使用RFCOMAPIlib(RightFax COM API):无法转换COM对象

时间:2011-08-17 21:35:47

标签: api com queryinterface rightfax

我正在使用RightFax COM API。我想要做的只是发送带附件的传真。简单吧?这个问题已被回答了几次。但是,当我在我的应用程序中使用某些代码时,我有点麻烦。

申请:RightFax 9.4
语言:C#(ASP.NET应用程序)
IDE:MS Visual Web Dev。快速
目标框架:.NET 3.5
操作系统:Windows 7

using ...
public static void SendFax(<arguments>)
{
    RFCOMPAPILib.FaxServerClass fs = new RFCOMAPILib.FaxServerClass();
    fs.Name = "faxSvrName";
    // BOOM, exception
}

我甚至没有超过服务器的名称。

例外细节:
无法将“RFCOMAPILib.FaxServerClass”类型的COM对象转换为接口类型“RFCOMAPILib.Form”。此操作失败,因为对IID为“{9F386618-764B-48F8-A5BF-3682B03DE840}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE))

因此。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这个COM接口过度设计了一下,但模式并不罕见。 COM coclass可以实现多个接口,其中一个是默认接口。该机制在.NET中不存在,它不支持多重继承或默认接口的概念。 Tlbimp使用名称mumbleClass合成一个伪包装类来包装一个名为mumble的coclass。这是所有接口实现的所有方法的包。异常消息告诉您的是,FaxServer coclass的默认接口名为“Form”。并且RFCOMAPILib.Form无法强制转换为RFCOMAPILib.FaxServerClass。没什么好吃的。

您需要将代码重写为类似的内容:

 RFCOMPAPILib.FaxServer fs = new RFCOMAPILib.FaxServerClass();
 fs.Name = "faxSvrName";

我完全猜测接口名称,“IFaxServer”的几率。使用对象浏览器查找实际名称。

相关问题