MATLAB Release Notes    

外部インタフェース/APIのアップグレードの問題

MATLAB 6.1 から MATLAB 6.5 へのアップグレードの問題は、外部インタフェース/API機能については、以下に説明します。以下の項目があります。

logicalおよびsparseデータタイプの変更

MATLAB 6.5 では、sparseデータタイプは、その元となるデータタイプの属性に変更されています。また、logicalデータ属性は、first classデータタイプに変更されています。詳細は、プログラミングとデータタイプのアップグレードの問題を参照してください。

以下の節では、この変更がCプログラムにどのように影響を与えるかを説明します。

mxIsLogicalは変更されていません.   関数mxIsLogicalは、MATLAB 6.5 では変更されていません。従来のリリースでlogical属性をもつ配列に対して出力したように、logical配列に対してtrueを出力します。

数値のテスト.   従来のリリースでは、mxIsNumericは、logical属性をもつ数値配列に対してtrueを出力しました。logicalは非数値データタイプであるため、この関数は、logical配列に対してfalseを出力します。

logicalに対するmxGetClassIDの利用.   mxGetClassIDは、logical配列に対して新規の値mxLOGICAL_CLASSを出力します。

スパース配列に対するmxGetClassIDの利用.   mxGetClassIDは、列挙された値mxSPARSE_CLASSを出力しません。代わりに、元になるデータタイプに対応する列挙された値を出力します。mxArrayがスパースであるかどうかを決定するには、mxIsSparseを使ってください。

スパース性のテスト.   従来のリリースでは、以下のステートメントを使って行列がスパースであるかどうかを決定することができました。これは、MATLAB 6.5 では機能しません。

行列がスパースであるかどうかを決定するには、mxIsSparse(x)を利用してください。関数mxIsSparseは、従来のリリースと同様に機能し、上記の操作よりも高速に実行します。

mxIsDoubleを使ったスパース性のテスト.   sparseは、MATLABデータタイプからデータ属性に変更されているため、mxIsDouble(x)は、従来のリリースのように~mxIsSparse(x)を意味しません。代わりにmxIsSparseを使って配列のスパース性をテストしてください。

mxIsSparseは変更ありません.   関数mxIsSparseは、MATLAB 6.5 では変更されていません。従来のリリースでsparse配列に対して出力したのと同様に、sparse属性をもつ配列に対してtrueを出力します。

新規Logical関数.   本リリースでは、9個の新規 C mx関数を導入しています。

関数
詳細
mxCreateLogicalArray
falseに初期化されたN次元、logical mxArrayを作成
mxCreateLogicalMatrix
falseに初期化された2次元、logical mxArrayを作成
mxCreateLogicalScalar
falseに初期化された、スカラ、logical mxArrayを作成
mxCreateSparseLogicalMatrix
要素をもたない2次元、スパースlogical mxArrayを作成
mxGetLogicals
logical配列データのポインタを取得
mxIsLogicalScalar
if クラスmxLOGICALのスカラmxArrayである場合はTrue
mxIsLogicalScalarTrue
クラスmxLOGICALのスカラmxArrayが真ならばTrue

廃止されたlogical関数.   つぎの2つの関数は、廃止されています。これらの関数のサポートは、将来のリリースでは削除される予定です。

関数
詳細
mxClearLogical
mxArrayを数値タイプに変換
mxSetLogical
mxArraylogicalタイプに変換

C APIの新規mx関数

新規関数logicalに加えて、MATLAB 6.5 は、以下の新規C mx関数を導入しています。

関数
詳細
mxCreateDoubleScalar
指定した値に初期化されたスカラ倍精度配列を作成
mxGetChars
キャラクタ配列データのポインタを取得

新規および廃止されたAPI関数

MATLABは、6.5 では、変数名をmxArrayに格納せずに、より効率的にmxArrayを扱います。mxArray名が必要なときは、引数リストに渡してください。

MATLABは、以下の表の右側の列にある関数を置き換えている新規CおよびFortran関数を提供します。新規関数は、mxArrayの名前を追加の引数として渡します(表の下の例を参照)。

右側の列の関数は廃止されており、将来のバージョンのMATLABでは利用できない場合があります。

新規関数
従来の関数
mexGetVariable
mexGetArray
mexGetVariablePtr
mexGetArrayPtr
mexPutVariable
mexPutArray
engGetVariable
engGetArray
engPutVariable
engPutArray
matDeleteVariable
matDeleteArray
matGetVariable
matGetArray
matGetVariableInfo
matGetArrayHeader
matGetNextVariable
matGetNextArray
matGetNextVariableInfo
matGetNextArrayHeader
matPutVariable
matPutArray
matPutVariableAsGlobal
matPutArrayAsGlobal

たとえば、以下の2行目と3行目を

以下の2行目で置き換えます。mxArrayの名前は、mxSetNameによってmxArrayに格納されるのではなく、matPutVariableを使って渡されます。

C++ ファイルのコンパイル

C++ MEXファイルをコンパイルするために、あらかじめ設定されたオプションファイルcxxopts.shを利用する必要はありません。MATLABは、以下のファイル拡張子をC++ 拡張子として認識し、C++コンパイラを自動的に利用します。

cxxopts.shファイルは、MATLABでは利用できません。

また、UNIXでは、C++オブジェクトをリンクしている場合は、MEXスクリプトの-cxxスイッチを利用する必要があります。

LAPACKに対するLCCのサポート

Windowsプラットフォームでは、MATLAB CコンパイラLccを使って、LAPACKおよびBLAS関数を呼び出すC MEX-ファイルをコンパイル、リンクすることができます。ファイルmyCmexFile.cをコンパイルし、LAPACKライブラリファイルlibmwlapack.libにリンクするには、以下のコマンドを利用してください。

用語<matlab>は、MATLABルートディレクトリを意味します。

COMに対するクライアントサポート

MATLAB COMインタフェースに対するクライアントサポートは、MATLAB 6.5では大きく変更されています。多くの新規に加えて、従来サポートされていた機能の重要な変更があります。本節では、これらの変更点が既存のプログラムにどのように影響を与えるかを説明します。

詳細は、リリースノートの新規COMクライアントサポート機能とMATLABドキュメントのMATLAB COM Client Supportを参照してください。

COM環境の切り替え.   MATLABは、新規のMATLAB 6.5 COM環境をデフォルトとします。この環境では、本節やMATLAB 6.5ドキュメントで記述されている新機能を利用することができます。

MATLAB 6.5 よりも以前のCOM環境を利用するには、以下のコマンドを入力してください。

MATLAB 6.5 COM環境に戻るには、つぎのようにタイプします。

オブジェクトまたはインタフェースの作成.   actxcontrolまたはactxserverを使ってCOMコントロールまたはサーバを作成するとき、MATLABは、activex objectとしてではなく、COM.<string>として表示されるCOMオブジェクトを出力します。

これは、COMオブジェクトのインタフェースにも適用されます。MATLABは、activex objectではなく、Interface.<string>としてインタフェースを表わします。

存在しないProgIDの新規エラー.   actxcontrolactxserverは、両方共無効なProgIDが入力されたときに異なるエラーメッセージを出力します。

getにより出力されるデータ.   関数getが出力する情報は、各インタフェースに対するタイプを示します。

getが出力するプロパティ名は、アルファベット順には並べられません。Type Libraryから取得される順番で表示されます。

引数なしで呼び出されるSet.   関数setをオブジェクトトまたはインタフェースのハンドル以の引数を使わずに呼び出すとき、MATLABはエラーを出力しません。その代わりに、オブジェクトのすべてのプロパティをリストしている構造体配列を出力します。構造体配列は、それらのプロパティの列挙された値も含み、値を列挙された文字列として表わすことができます。

旧エラーメッセージ:

MATLAB 6.5で出力される値:

invokeにより出力されるメソッドデータの変更.   関数invokeは、オブジェクトまたはインタフェースのメソッドについてより役立つデータを出力します。以下の例に見られる違いに注目してください。

また、必要なhandle引数は明示的に示されていることに注意してください。

COMに対する関数method.   関数methodsは、指定したクラスのすべての メソッドに対する名前を出力します。

COMオブジェクトにおいて関数methodsviewを使ってオブジェクトプロパティのグラフィカル表示を取得することも可能です。

引数をもつプロパティ.   MATLAB 6.5では、引数を取るプロパティは、メソッドとして扱われます。たとえば、ExcelアプリケーションサーバのRangeおよびItemプロパティは、現在はメソッドです。

そのため、ItemSheetspropertyのとき、つぎのステートメント

は、以下のように書き換えることができます。ここで、ItemSheetsmethod です。

Sheetsに対するプロパティとメソッドのリストを要求する場合は (それぞれgetinvokeを使って)、MATLABはItemをメソッドとしてリストします。

下位互換性のため、MATLAB 6.5 の関数は、メソッドおよびプロパティとして引数をもつプロパティをサポートします。

イベントハンドラの引数.   コントロールがイベントをトリガするとき、MATLABは引数をコントロールから登録されたイベントハンドラに渡します。MATLABは、2つの引数を渡します。

イベントハンドラに影響を与える変更に関する情報は、MATLABドキュメントのWriting Event Handlersを参照してください。

識別子を使ってイベントを指定.   関数actxcontrolまたはregistereventを使ってハンドラ関数をもつイベントを登録するときに、イベントID番号またはイベント名によってイベントを指定することができます。

イベントID番号を利用

イベント名を利用

Use the 新規関数eventsを使って、COMオブジェクトによって認識されるすべての利用中のイベントの名前を表示します。たとえば、mwsampコントロールに対するすべてのイベントをリストするには、以下を利用します。

Boolean返り値.   Boolean値を出力するプロパティについてgetを呼び出すと、1を出力し、trueであることを示します。従来は、trueに対して-1を出力しました。

また、Boolead値を出力するメソッドを呼び出すと、1を出力し、trueであることを示します。これは、従来は、trueに対して-1を出力しました。

コントロールまたはサーバのリリースと削除.   本リリースは、MATLABでの潜在的なメモリリークに対処しています、メモリリークは、以下によって発生していました。

COMオブジェクトまたはインタフェースの明示的な解放または削除は、現在は必要ありません。MATLABは、clearが呼び出されたとき、あるいはオブジェクトまたはインタフェースを表わす変数が新規の値を割り当てるか、範囲外になったときに、オブジェクトまたはインタフェースをメモリから正常にクリアします。


  グラフィックスのアップグレードの問題 グラフィカルユーザインタフェースの作成(GUIDE)のアップグレードの問題