【问题标题】:Using the RFCOMAPIlib (RightFax COM API): Unable to cast COM object使用 RFCOMAPIlib (RightFax COM API):无法转换 COM 对象
【发布时间】:2011-10-29 07:31:04
【问题描述】:

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

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

所以。有什么建议吗?

【问题讨论】:

    标签: api com queryinterface rightfax


    【解决方案1】:

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

    【讨论】:

    • 正确猜测接口名称。我将对其进行测试并在明天返回结果。谢谢。
    • 那行得通。虽然它仍然不会发送:P 现在我只需要确定这个失败,可能更多的是与服务器而不是现在的程序有关。感谢您的帮助!
    猜你喜欢
    • 2011-08-17
    • 2018-11-16
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2014-04-15
    • 1970-01-01
    相关资源
    最近更新 更多