ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

COM オブジェクトの作成

サーバー プロセスの作成 — 概要

MATLAB® ソフトウェアには、COM オブジェクトを作成する 2 つの関数があります。

  • actxcontrol — MATLAB Figure ウィンドウ内に Microsoft® ActiveX® コントロールを作成します。

  • actxserver — ダイナミック リンク ライブラリ (DLL) コンポーネントのインプロセス サーバー、または実行可能 (EXE) コンポーネントのアウトプロセス サーバーを作成します。

次のダイアグラムは、サーバー プロセス作成の基本的な手順を示しています。結果として得られる COM オブジェクトに対して MATLAB ソフトウェアがインターフェイスを設定する方法の詳細は、COM オブジェクト インターフェイスを参照してください。

ActiveX コントロールの作成

ユーザー インターフェイス (actxcontrolselect) またはコマンド ラインから関数 actxcontrol を使って、MATLAB クライアントから ActiveX コントロールのインスタンスを作成できます。これらの方法のいずれも、MATLAB クライアント プロセスでコントロールのインスタンスを作成し、COM オブジェクトへのプライマリ インターフェイスにハンドルを返します。このインターフェイスを通じて、オブジェクトのパブリック プロパティまたはメソッドにアクセスできます。また、IDispatch を使用するインターフェイスを含め、さらなるインターフェイスをオブジェクトに対して確立できます。

この節では、コントロールのインスタンスの作成方法と、このインスタンスを MATLAB の Figure ウィンドウに配置する方法を説明します。

インストール済みのコントロールのリスト

関数 actxcontrollist は、現在どの COM コントロールがシステムにインストールされているかを表示します。以下を入力します。

list = actxcontrollist

名前、プログラム識別子 (ProgID)、ファイル名などを含む各コントロールがリストされた cell 配列が MATLAB によって表示されます。

この例は、いくつかのコントロールの情報を示します (結果は異なることがあります)。

list = actxcontrollist;
s = sprintf(' Name = %s\n ProgID = %s\n File = %s\n', list{114:115,:})

MATLAB に以下のように表示されます。

s =

 Name = OleInstall Class
 ProgID = Outlook Express Mime Editor
 File = OlePrn.OleInstall.1
 Name = OutlookExpress.MimeEdit.1
 ProgID = C:\WINNT\System32\oleprn.dll
 File = C:\WINNT\System32\inetcomm.dll

特定のコントロールの検出

コントロールの名前がわかっている場合は、その ProgID とそれが含まれているフォルダーのパスを表示できます。たとえば、このドキュメンテーションの例のいくつかには、Mwsamp2 コントロールが使用されています。次のコードを使って、それを検索できます。

list = actxcontrollist;
for ii = 1:length(list)
   if ~isempty(strfind([list{ii,:}],'Mwsamp2')) 
      s = sprintf(' Name = %s\n ProgID = %s\n File = %s\n', ...
             list{ii,:})
   end
end
s =

   Name = Mwsamp2 Control
   ProgID = MWSAMP.MwsampCtrl.2
   File =
   D:\Apps\MATLAB\R2006a\toolbox\matlab\winfun\win32\mwsamp2.ocx

このファイルの場所は、MATLAB インストールごとに異なります。

UI を使用したコントロール オブジェクトの作成

関数 actxcontrolselect の使用は、コントロール オブジェクトのインスタンスを作成する最もシンプルな方法です。この関数は、システムにインストールされているすべてのコントロールを表示します。リストから項目を選択し、[作成] ボタンをクリックすると、MATLAB がコントロールを作成し、このコントロールにハンドルを返します。以下を入力します。

h = actxcontrolselect

MATLAB により、[Select an ActiveX Control] ダイアログ ボックスが表示されます。インターフェイスには、左側に [ActiveX Control List] 選択ペイン、右側に [Preview] ペインがあります。コントロールのプレビューを表示するには、選択ペインでコントロール名の 1 つをクリックします (空白のプレビュー ペインは、そのコントロールにはプレビューがないことを意味します)。MATLAB がインスタンスを作成できない場合は、プレビュー ペインにエラー メッセージが表示されます。

actxcontrolselect でのプロパティの設定-  コントロールを作成するときにプロパティ値を変更するには、[Preview] ぺインで [Properties] ボタンをクリックします。コントロールを配置する Figure ウィンドウ ("Parent" フィールド)、ウィンドウ内の配置場所 ("X""Y" フィールド) およびコントロールのサイズ ("Width""Height") を選択します。

このウィンドウでコントロールに応答させるイベントを登録できます。[イベント ハンドラー] の下のイベントの右側にルーチンの名前を入力します。

"イベント" 列の名前をクリックし、[Browse] ボタンをクリックすると、コールバック ルーチンを選択できます。コールバック ルーチンを複数のイベントに割り当てるには、まず、Ctrl キーを押して個々のイベント名をクリックします。あるいは、マウスをドラッグして連続するイベント名を選んでから、[Browse] をクリックしてコールバック ルーチンを選択します。

MATLAB は、登録済みのイベントにのみ応答するため、コールバックを指定しないと、イベントは無視されます。

たとえば、[ActiveX Control List] ペインで、"カレンダー コントロール 10.0" (ご使用のシステムでのバージョンは異なる場合があります) を選択し、[Properties] をクリックします。MATLAB により、[Choose ActiveX Control Creation Parameter] ダイアログ ボックスが表示されます。コントロールの既定のサイズを変更するには、"Width"500"Height"350 と入力します。カレンダー コントロールのインスタンスを作成するには、このウィンドウ内の [OK] をクリックして、次のウィンドウの [作成] をクリックします。

また、関数 actxcontrol を使ってコントロール パラメーターを設定できます。関数 actxcontrol で設定でき、関数 actxcontrolselect では設定できないパラメーターは、初期化ファイルの名前です。このファイル名を指定すると、MATLAB は、コントロールの初期状態を以前に保存されたコントロールの状態に設定します。

actxcontrolselect によって返される情報-  関数 actxcontrolselect は、MATLAB COM クラスのインスタンスであるオブジェクトを作成します。関数は、次のような最大 2 つの引数を返します。オブジェクトのハンドル h、およびコントロールに関する情報を含む 13 列の cell 配列 info。この情報を入手するには、以下を入力します。

[h, info] = actxcontrolselect

cell 配列 info には、コントロールの名前、ProgID およびファイル名が表示されます。

カレンダー コントロールを選択し、[作成] をクリックした場合、MATLAB には、以下のような情報が表示されます。

h =
   COM.mscal.calendar.7
info = 
    [1x20 char]    'MSCAL.Calendar.7'    [1x41 char]

cell 配列 info を拡張するには、以下を入力します。

info{:}

MATLAB に以下のように表示されます。

ans =
   Calendar Control 9.0
ans =
   MSCAL.Calendar.7
ans =
   D:\Applications\MSOffice\Office\MSCAL.OCX

コマンド ラインからのコントロール オブジェクトの作成

対象とするコントロールとその ProgID がわかっている場合は、コントロールのインスタンスを作成するために、関数 actxcontrol を使用できます。

この関数に入力が必要となるのは、ProgID のみです。さらに、コントロールを配置する Figure ウィンドウ、ウィンドウ内の配置場所および作成するコントロールのサイズを選択できます。また、コントロールに応答させたいイベントを登録したり、ファイルから状態を読み取ってコントロールの初期状態を設定することもできます。入力引数の詳細な説明は、関数 actxcontrol のリファレンス ページを参照してください。

関数 actxcontrol は、オブジェクトへのプライマリ インターフェイスにハンドルを返します。このハンドルを使って、他の COM 関数の呼び出しでオブジェクトを参照します。また、ハンドルを使用してオブジェクトへの追加インターフェイスを取得することもできます。インターフェイスの使用の詳細は、COM オブジェクト インターフェイスを参照してください。

Figure ウィンドウのコントロールの再置換

コントロールを作成した後、関数 move を使って、ウィンドウ内で形状と位置を変更できます。

前節で作成したオブジェクトに新しい起点座標 (70120) と、新しい幅と高さ (400350) を指定すると何が起こるかを観測します。

move(h,[70 120 400 350]);

ActiveX サポートに関する制限

MATLAB COM ActiveX コントロール コンテナーでは、コントロールは表示されるまでインプレース アクティブになりません。

COM サーバーの作成

DLL コンポーネントのインスタンス化

ダイナミック リンク ライブラリ (DLL) として実装されたコンポーネントのサーバーを作成するには、関数 actxserver を使用します。MATLAB は、クライアント アプリケーションを含むプロセスと同じ方法でコンポーネントのインスタンスを作成します。

関数 actxserver の構文は、DLL コンポーネントと使用した場合は actxserver(ProgID) となります。ここで、ProgID はコンポーネントのプログラム識別子です。

関数 actxserver は、オブジェクトへのプライマリ インターフェイスにハンドルを返します。このハンドルを使って、他の COM 関数の呼び出しでオブジェクトを参照します。また、ハンドルを使用してオブジェクトへの追加インターフェイスを取得することもできます。インターフェイスの使用の詳細は、COM オブジェクト インターフェイスを参照してください。

Microsoft ActiveX コントロールと異なり、サーバーにより表示されるユーザー インターフェイスは別のウィンドウに表示されます。

32 ビット インプロセス DLL COM オブジェクトを、64 ビット MATLAB アプリケーションで使用することはできません。この制限の詳細については、https://www.mathworks.com/matlabcentral/answers/95116-why-am-i-not-able-to-use-32-bit-dll-com-objects-in-64-bit-matlab-7-3-r2006bを参照してください。

EXE コンポーネントのインスタンス化

関数 actxserver を使って、実行可能ファイル (EXE) として実装されたコンポーネントにサーバーを作成できます。この場合、MATLAB は、アウトプロセス サーバーでコンポーネントをインスタンス化します。

実行可能ファイルを作成する actxserver の構文は actxserver(ProgID, sysname) です。ProgID はコンポーネントのプログラム識別子、そして sysname は分散 COM (DCOM) システムの構成に使用するオプションの引数です。

関数 actxserver は、COM オブジェクトへのプライマリ インターフェイスにハンドルを返します。このハンドルを使って、他の COM 関数の呼び出しでオブジェクトを参照します。また、ハンドルを使用してオブジェクトへの追加インターフェイスを取得することもできます。インターフェイスの使用の詳細は、COM オブジェクト インターフェイスを参照してください。

サーバーにより表示されるユーザー インターフェイスは、別のウィンドウに表示されます。

この例では、Microsoft Excel® スプレッドシート プログラムを実行する COM サーバー アプリケーションを作成します。ハンドルは、h に割り当てられます。

h = actxserver('Excel.Application')

MATLAB に以下のように表示されます。

h =
    COM.excel.application

MATLAB は、コンピューターで既に実行している COM オートメーション サーバー アプリケーションのインスタンスにプログラムから接続します。アプリケーションなどへの参照を取得するには、関数 actxGetRunningServer を使用します。

この例では、Excel プログラムへの参照を取得します。この場合、プログラムがシステムで既に実行されていなければなりません。返されたハンドルは、h に割り当てられます。

h = actxGetRunningServer('Excel.Application')

MATLAB に以下のように表示されます。

h =
    COM.excel.application

参考

| |