私は知っている、WinFax Proはそうです。1998年。.NETアプリケーションからWinFax Pro COMオブジェクトを使用するにはどうすればよいですか?
(注:これはWinFax.dllとは明らかにWindowsの一部です。これは元々Delrinaの独立した商用アドオンアプリですSymantecによって買収された)。
私はまだWinFax Proを運用システムとして使用しているオフィスで働いています。彼らはWinFax Pro "PhoneBook"に保存されている顧客のファックス番号を持っており、それを利用して顧客にサービス訪問を通知します。今動作する方法は、Macカレンダーから生成された(印刷された)スケジュールを見てから、WinFax電話帳の該当するすべてのエントリをクリックして通知ファックスを送信することです。
これは「スイベルチェア」の統合と呼ばれていましたが、これは2つの画面を参照していました。これは2つの画面でもなく、1枚の紙と1枚の画面です。
とにかく私はそれを自動化して問題を起こそうとしています。
良いニュース:
- WinFax Proは、その機能をCOMオブジェクトとして公開しています。FAX送信エンジンのWinFax.SDKSend。アドレス帳のWinFax.SDKPhoneBookなど。
- WinFax Proには、これらのさまざまなCOMオブジェクトを記述するタイプライブラリwfxctl32.tlbが付属しています。 - .NET(C#)のWinFax.SDKSendオブジェクトを、tlbimportから生成されたラッパーを使用して正常に使用できるようになりました。 (私は.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, "");
}
例外:
Exception: System.InvalidCastException: Unable to cast COM object of type 'wfxctl32.CSDKPhoneBookClass' to interface type 'wfxctl32.ISDKPhoneBook'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{A67FCC81-9949-11D0-961E-444553540000}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at wfxctl32.CSDKPhoneBookClass.GetFolderListFirst(Int16 standardFolder, String folderID)
あなたはおそらくこれまでにそれにうんざりしていますが、これは本当の原因ではありません。 Tlbimpはタイプライブラリのデュアルインタフェースを見つけるのに問題はなく、サーバが実際に実装していないことは知られていません。このような事故の最も一般的な原因は、インストールされているバージョンと一致しないバージョン管理の問題です。一般的には、アップデートには新しいガイドが必要です。 –
@ハンス - あなたは正しいかもしれません。私はCOMの専門家ではありません。しかし、私が問題のProgId( 'WinFax.SDKPhoneBook')でOleViewを使用すると、IDispatch、IUnknown、ITypeInfo、その他いくつかのものが表示されますが、WinFax Proで定義されたアプリケーションインターフェイスではありません。 .tlbにそれがあれば、COMオブジェクトは初期バインドされたインタフェースとしてそれを公開するだろうと思ったので、私は困惑させました。私はバージョンとGUIDを調べました - それは問題ではないようです。シマンテックが初期のインターフェースを実装したことはないようです。それは不可能だと思いますか? (深刻なQ) – Cheeso
ああ、シマンテック。私は突然、もはやそれほど興味がありません。あなたは何かがある、あなたのために働くべきである。がんばろう。 –