【发布时间】:2011-06-15 06:46:12
【问题描述】:
我知道,WinFax Pro 是 1998 年的。
(注意:这不是 WinFax.dll,它显然是 Windows 的一部分。这是 WinFax Pro,一个单独的商业附加应用程序,最初来自 Delrina,后来被赛门铁克收购)。
我在仍然使用 WinFax Pro 作为操作系统的办公室工作。他们将客户传真号码存储在 WinFax Pro“电话簿”中,并使用它来通知客户服务访问。它现在的工作方式是,某人查看从 Mac 日历生成的(打印的)时间表,然后单击 WinFax 电话簿中的所有适当条目,以发送通知传真。
这就像我们过去所说的“转椅”集成,但它指的是 2 个屏幕。这甚至不是 2 个屏幕——它是一张纸和一个屏幕。
无论如何,我正在尝试使其自动化并且遇到了麻烦。
好消息:
- WinFax Pro 将其功能公开为 COM 对象: WinFax.SDKSend 用于传真发送引擎; WinFax.SDKPhoneBook 为通讯录等。
- WinFax Pro 提供了一个类型库 wfxctl32.tlb,它描述了这些不同的 COM 对象。
- 我能够通过从 tlbimport 生成的包装器成功使用 .NET (C#) 中的 WinFax.SDKSend 对象。 (我使用的是 .NET 3.5,不能使用 .NET 4.0)。
坏消息:
除了 WinFax.SDKSend,我无法调用 WinFax COM 对象上的任何方法。签名看起来并不比 WinFax.SDKSend 中的签名复杂,但我不断收到异常。
C# 代码:
public void Run()
{
var pb = new wfxctl32.CSDKPhoneBook();
string id = pb.GetFolderListFirst(1, "");
}
例外:
异常:System.InvalidCastException:无法转换 COM 对象 将“wfxctl32.CSDKPhoneBookClass”键入接口类型 'wfxctl32.ISDKPhoneBook'。此操作失败,因为 对具有 IID 的接口的 COM 组件上的 QueryInterface 调用 '{A67FCC81-9949-11D0-961E-444553540000}' 由于以下原因而失败 错误:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE))。
在 System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32culture, String[] namedParameters)
在 System.RuntimeType.InvokeMember(字符串名称、BindingFlags bindingFlags、Binder binder、Object 目标、Object[] providedArgs、ParameterModifier[] 修饰符、CultureInfo 文化、String[] namedParams)
在 System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
在 wfxctl32.CSDKPhoneBookClass.GetFolderListFirst(Int16 standardFolder, String folderID)
【问题讨论】:
标签: c# .net com interop winfax