2

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

应用程序:RightFax 9.4
语言:C#(ASP.NET 应用程序)
IDE:MS Visual Web Dev。Express
目标框架:.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)) .

所以。有什么建议么?

4

1 回答 1

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”的一些可能性。使用对象浏览器查找实际名称。

于 2011-08-17T21:56:59.910 回答