English | 日本語
ホーム > Merge > Merge for Windows > ドキュメントの目次 > オートメーション API 入門

オートメーション API 入門

Merge オートメーション API は Araxis Merge と通信する簡単な方法を提供します。 API は(IDispatch によって)事前バインディングと遅延バインディングの両方をサポートし、多くのオートメーション クライアントから使用できます。API イベント モデルは、ネイティブ インターフェイスおよび Windows Scripting Host's ConnectObject モデルの両方の接続ポイントをサポートします。

Automation API の参照

API COM オブジェクトにアクセスして事前バインディング(または stongly-typed)を使用するには、クライアント言語はプロジェクトにオートメーション API への参照を追加する必要があります。スクリプト言語(例えば VBScript と JScript ) は一般に遅延バインディングを使用しますからこの手順は必要ではありません。

Visual Basic v6.0

Visual Basic v6.0 で Merge オートメーション API を使用するには、Merge タイプ ライブラリへの参照を追加する必要があります。

References... menu References... window

参照を追加すると Merge オートメーション オブジェクトとタイプが Merge70 ネームスペースに現れます。

Visual Studio .NET 2005 (マネージ プロジェクト)

Merge のオートメーション API を Visual Studio.NET 2005 マネージ オブジェクトで使用するには、Merge インストール フォルダに含まれるプレビルト COM 相互接続アセンブリ(Interop.Merge70.dll および Interop.Merge70.dll )への参照を追加するか、以下のように Merge タイプ ライブラリへの参照を追加することができます。

Add Reference... menu Add Reference... window

参照を追加すると Merge オートメーション オブジェクトとタイプが Merge70 ネームスペースに現れます。

Visual C++ (アンマネージ プロジェクト)

プリコンパイルされたタイプ ライブラリ ファイル(Merge.tlb)または Merge に含まれる IDL によって生成されたヘッダ ファイル(Merge.h)を参照することができます。両ファイルは Merge のインストール フォルダにあります。一般的には C:¥Program Files¥Araxis¥Araxis Merge です。

#import <Merge.tlb> Merge70 ネームスペースにタイプ定義をインポートします。 Visual C++ の Compiler COM Support (CCS) モデルを使用する場合は #import を使用します。
#include <Merge.h> グローバル ネームスペースにタイプ定義をインポートします。 ATL または自作の COM クライアントを使用する場合は #include を使用します。

オートメーション API の使用

Merge オートメーション ライブラリのルート オブジェクトは Application オブジェクトです。このオブジェクトはオプションをセットして、ファイルとフォルダの比較を行うために使用するオブジェクトへのアクセスを提供します。

Application オブジェクトのインスタンスの作成

下記のすべての例では Application オブジェクトのインスタンスを作成して変数 app に参照を置きます。

言語 コード
JScript
var app = WScript.CreateObject("Merge70.Application");
VB6
Dim app As New Merge70.Application
C#
Merge70.Application app = new Merge70.ApplicationClass();
VB.NET
Dim app As New Merge70.ApplicationClass
C++ (CCS)
CoInitialize(0);
{
  Merge70::IApplicationPtr app;
  HRESULT hr = app.CreateInstance(__uuidof(Merge70::Application));
  if (FAILED(hr))
    _com_raise_error(hr);
  // ...
}
CoUninitialize();
C++ (ATL)
CoInitialize(0);
{
  CComPtr<IApplication> app;
  HRESULT hr = app.CoCreateInstance(__uuidof(Application));
  if (FAILED(hr))
    /* ... handle error */
  // ...
}
CoUninitialize();

テキスト ファイル比較の実行

テキスト ファイルの比較を行うために TextComparison オブジェクトを Application オブジェクトから得る必要があります。 Application オブジェクトは TextComparison と呼ばれるプロパティを公開します。 このプロパティはアクセスされるたびに TextComparison オブジェクトの新しいインスタンスを返します。それで一般的にプロパティの値を変数に保存します。 TextComparison オブジェクトのインスタンスを持てばファイルを比較して、比較結果の HTML レポートなどを作成する Compare メソッドを呼びます。

言語 コード
JScript
var tc = app.TextComparison;
tc.Compare("c:¥¥temp¥¥test1.txt", "c:¥¥temp¥¥test2.txt");
tc.Report("html", 0/*lesCRLF*/, "c:¥¥temp¥¥report.htm");
VB6
Dim tc As Merge70.TextComparison
Set tc = app.TextComparison
tc.Compare "c:¥temp¥test1.txt", "c:¥temp¥test2.txt"
tc.Report "html", Merge70.lesCRLF, "c:¥temp¥report.htm"
C#
Merge70.IFileComparison tc = app.TextComparison;
tc.Compare("c:¥¥temp¥¥test1.txt", "c:¥¥temp¥¥test2.txt", 0);
tc.Report("html", Merge70.LineEndingStyle.lesCRLF,
  "c:¥¥temp¥¥report.htm");
VB.NET
Dim tc As Merge70.IFileComparison
tc = app.TextComparison
tc.Report("html", Merge70.LineEndingStyle.lesCRLF,
  "c:¥temp¥report.htm")
C++ (CCS)
Merge70::IFileComparisonPtr tc = app->TextComparison;
tc->Compare(
  _variant_t("c:¥¥temp¥¥test1.txt"),
  _variant_t("c:¥¥temp¥¥test2.txt"),
  _variant_t());
tc->Report(
  _bstr_t("html"),
  Merge70::lesCRLF, 
  _bstr_t("c:¥¥temp¥¥report.htm"));
C++ (ATL)
CComPtr<IFileComparison> tc;
hr = app->get_FileComparison(&tc);
if (FAILED(hr))
  ;/* ... handle error */
hr = tc->Compare(
  CComVariant("C:¥¥temp¥¥test1.txt"), 
  CComVariant("C:¥¥temp¥¥test2.txt"), 
  CComVariant());
if (FAILED(hr))
  ;/* ... handle error */
hr = tc->Report(
  CComBSTR("html"),
  lesCRLF, 
  CComBSTR("c:¥¥temp¥¥report.htm"));
if (FAILED(hr))
  ;/* ... handle error */

ファイル比較が行われると TextComparison オブジェクトによって提供されるメソッドとプロパティを使用して、結果の調査、結果の高度な処理 - たとえばレポート作成、印刷、ファイルに保存などが行えます。

フォルダ比較の実行

ファイルとフォルダ比較のオートメーション オブジェクトは非常に似たインターフェイスを持っています。 しかし Compare メソッドはフォルダ比較では異なる動作をします。 ファイル比較では Compare メソッドは同期です。メソッドが完了した時点で比較結果は利用できます。 フォルダ比較では Compare メソッドは非同期です。ほとんどの場合、メソッドが完了してから結果が利用可能になるまでの間に遅れがあります。結果が利用可能になるのを待つために使用できる 2 つの方法があります。 FolderComparison オブジェクトの Busy プロパティの値が False になるまでテストすることです。

言語 コード
JScript
var app = WScript.CreateObject("Merge70.Application");
var fc = app.FolderComparison;

fc.Compare("c:¥¥temp¥¥FolderA", "c:¥¥temp¥¥FolderB");
while (fc.Busy)
  {
    WScript.Sleep(1000);
  }
fc.Report("html", 0, "c:¥¥temp¥¥folderreport.htm");

2 番目の方法はフォルダ比較が完了した時に Merge が発生させる ComparisonComplete イベントの中で記録することです。

言語 コード
JScript
var app = WScript.CreateObject("Merge70.Application");
var fc = app.FolderComparison;
var completed = false;

WScript.ConnectObject(fc, "fc_");
fc.Compare("c:¥¥temp¥¥FolderA", "c:¥¥temp¥¥FolderB");

WScript.echo("waiting for completion");
while (!completed)
  {
    /* do other work */
    WScript.Sleep(1000);
  }
WScript.echo("completed...");
WScript.DisconnectObject(fc);

function fc_ComparisonComplete(resultCode)
{
  fc.Report("html", 0, "c:¥¥temp¥¥folderreport.htm");
  completed = true;
}

この 2 番目の方法はファイルまたはフォルダ比較 オブジェクトによって発生したそのほかのイベントに対応してタスクを実行することができます。たとえば比較ウィンドウを閉じているユーザーに対応する場合など。

ユーザー インターフェイスのコントロール

デフォルトで オートメーション API にアクセスした場合、ユーザー インターフェイスは現れません。 メイン Merge ウィンドウをスクリーンに表示させるには、Application オブジェクトの Visible プロパティを Trueに設定します。 ウィンドウをアクティブにするには Active プロパティを True に設定します。通常 Merge はオートメーション オブジェクトに対する最後の参照がリリースされたときにシャットダウンします。 もしオブジェクトのユーザー インターフェイスをユーザーが操作できるように残しておきたい場合は、GiveUserControl メソッドを次のオブジェクトから呼び出してください。ApplicationTextComparisonBinaryComparisonImageComparisonおよびFolderComparison

オートメーション API の完全な例

幾つかの言語での例は ソース コード から利用可能です。


関連するトピック