我正在使用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)) 的
因此。有什么建议吗?
答案 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”的几率。使用对象浏览器查找实际名称。