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 |
mxArray をlogical タイプに変換 |
C APIの新規mx関数
新規関数logical
に加えて、MATLAB 6.5 は、以下の新規C mx
関数を導入しています。
関数 |
詳細 |
mxCreateDoubleScalar |
指定した値に初期化されたスカラ倍精度配列を作成 |
mxGetChars |
キャラクタ配列データのポインタを取得 |
注意
mxCreateDoubleScalar は、mxCreateScalarDouble を差し替えています(mxCreateScalarDoubleは、現時点でサポートされています)。
|
新規および廃止された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行目で置き換えます。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ルートディレクトリを意味します。
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の新規エラー. actxcontrol
とactxserver
は、両方共無効なProgID
が入力されたときに異なるエラーメッセージを出力します。
h = actxcontrol('xxxxx') ??? Error using ==> actxcontrol Control creation failed. Invalid ProgID 'xxxxx'
getにより出力されるデータ. 関数get
が出力する情報は、各インタフェースに対するタイプを示します。
h = actxserver ('Excel.Application'); get(h) ans = Application: [1x1 Interface.excel.application.Application] Parent: [1x1 Interface.excel.application.Parent] Windows: [1x1 Interface.excel.application.Windows] Workbooks: [1x1 Interface.excel.application.Workbooks] . .
get
が出力するプロパティ名は、アルファベット順には並べられません。Type Libraryから取得される順番で表示されます。
引数なしで呼び出されるSet. 関数set
をオブジェクトトまたはインタフェースのハンドル以の引数を使わずに呼び出すとき、MATLABはエラーを出力しません。その代わりに、オブジェクトのすべてのプロパティをリストしている構造体配列を出力します。構造体配列は、それらのプロパティの列挙された値も含み、値を列挙された文字列として表わすことができます。
invokeにより出力されるメソッドデータの変更. 関数invoke
は、オブジェクトまたはインタフェースのメソッドについてより役立つデータを出力します。以下の例に見られる違いに注目してください。
h = actxserver('excel.application'); % Invoke, prior to MATLAB 6.5 invoke(h) DeleteCustomList = Void DeleteCustomList (Int) MailLogon = Void MailLogon (Variant[opt], Variant[opt], Variant[opt]) NextLetter: 'Variant(Pointer) NextLetter ()' : : % Invoke, in MATLAB 6.5 invoke(h) DeleteCustomList: 'void DeleteCustomList(handle, int32)' MailLogon: 'void MailLogon(handle, [Optional]Variant)' NextLetter: 'handle NextLetter(handle)' : :
また、必要なhandle
引数は明示的に示されていることに注意してください。
COMに対する関数method. 関数methods
は、指定したクラスのすべての メソッドに対する名前を出力します。
h = actxcontrol('MWSAMP.MWSampCtrl.1'); methods(h) Methods for class COM.mwsamp.mwsampctrl.1: AboutBox GetR8Array SetR8 move Beep GetR8Vector SetR8Array propedit FireClickEvent GetVariantArray SetR8Vector release GetBSTR GetVariantVector addproperty save : :
COMオブジェクトにおいて関数methodsview
を使ってオブジェクトプロパティのグラフィカル表示を取得することも可能です。
引数をもつプロパティ. MATLAB 6.5では、引数を取るプロパティは、メソッドとして扱われます。たとえば、ExcelアプリケーションサーバのRange
およびItem
プロパティは、現在はメソッドです。
そのため、Item
がSheets
のpropertyのとき、つぎのステートメント
は、以下のように書き換えることができます。ここで、Item
はSheets
のmethod です。
Sheets
に対するプロパティとメソッドのリストを要求する場合は (それぞれget
とinvoke
を使って)、MATLABはItem
をメソッドとしてリストします。
下位互換性のため、MATLAB 6.5 の関数は、メソッドおよびプロパティとして引数をもつプロパティをサポートします。
イベントハンドラの引数. コントロールがイベントをトリガするとき、MATLABは引数をコントロールから登録されたイベントハンドラに渡します。MATLABは、2つの引数を渡します。
イベントハンドラに影響を与える変更に関する情報は、MATLABドキュメントのWriting Event Handlersを参照してください。
識別子を使ってイベントを指定. 関数actxcontrol
またはregisterevent
を使ってハンドラ関数をもつイベントを登録するときに、イベントID番号またはイベント名によってイベントを指定することができます。
h = actxcontrol('MWSAMP.MwsampCtrl.2', [0 0 200 200], f, ... {-600, 'myclick'; -601 'my2click'; -605 'mymoused'});
h = actxcontrol('MWSAMP.MwsampCtrl.2', [0 0 200 200], f, ... {'Click', 'myclick'; 'DblClick' 'my2click'; ... 'MouseDown' 'mymoused'});
Use the 新規関数events
を使って、COMオブジェクトによって認識されるすべての利用中のイベントの名前を表示します。たとえば、mwsamp
コントロールに対するすべてのイベントをリストするには、以下を利用します。
f = figure ('pos', [100 200 200 200]); h = actxcontrol ('mwsamp.mwsampctrl.2', [0 0 200 200], f); events(h) Click = void Click() DblClick = void DblClick() MouseDown = void MouseDown(int16 Button, int16 Shift, Variant x, Variant y)
Boolean返り値. Boolean値を出力するプロパティについてget
を呼び出すと、1
を出力し、true
であることを示します。従来は、true
に対して-1
を出力しました。
h = actxserver('Excel.Application'); set(h, 'DisplayStatusBar', 1); get(h, 'DisplayStatusBar') ans = 1
また、Boolead値を出力するメソッドを呼び出すと、1
を出力し、true
であることを示します。これは、従来は、true
に対して-1
を出力しました。
コントロールまたはサーバのリリースと削除. 本リリースは、MATLABでの潜在的なメモリリークに対処しています、メモリリークは、以下によって発生していました。
release
またはdelete
を明示的に利用しないと、COMオブジェクトまたはインタフェースを完全にクリーンアップしませんでした。たとえば、つぎのclear
コマンドは、オブジェクトによって利用されるすべてのメモリを解放しませんでした。明示的なrelease(h)
は、clear
の前に実行する必要がありました。
COMオブジェクトまたはインタフェースの明示的な解放または削除は、現在は必要ありません。MATLABは、clear
が呼び出されたとき、あるいはオブジェクトまたはインタフェースを表わす変数が新規の値を割り当てるか、範囲外になったときに、オブジェクトまたはインタフェースをメモリから正常にクリアします。
![]() | グラフィックスのアップグレードの問題 | グラフィカルユーザインタフェースの作成(GUIDE)のアップグレードの問題 | ![]() |