我知道,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:无法将类型为“wfxctl32.CSDKPhoneBookClass”的 COM 对象转换为接口类型“wfxctl32.ISDKPhoneBook”。此操作失败,因为 IID 为“{A67FCC81-9949-11D0-961E-444553540000}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .
在 System.RuntimeType.InvokeDispMethod(字符串名称,BindingFlags invokeAttr,对象目标,Object[] args,Boolean[] byrefModifiers,Int32 文化,String[] namedParameters)
在 System.RuntimeType.InvokeMember(字符串名称,BindingFlags bindingFlags,Binder binder,在 wfxctl32.CSDKPhoneBookClass
的 System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)中的对象目标、Object[] providedArgs、ParameterModifier[] 修饰符、CultureInfo 文化、String[] namedParams)
。 GetFolderListFirst(Int16 standardFolder, String folderID)