R12 Release Notes    

外部インタフェース/APIの問題

Fortran MEX-ファイルのリコンパイル

MATLAB/Fortranインタフェースの変更により、Release 12(MATLAB 6.0)より前のバージョンで作成されたFortran MEX-ファイルは、MATLAB 6.0を使ってrebuildしない限り動作しません。

MEXファイルの互換性

Release 12 MATLAB Application Program Interface(API)は、既存のMEX-ファイルに関連する互換性の問題があります。

mexおよびmbuildのプレファレンスファイルの位置

Windowsプラットフォームでは、mexおよびmbuildコマンドは、以下にあるプレファレンスファイルを検索します。

以下の旧バージョンで用いられた位置とは異なります。

UNIXプラットフォームでは、mexおよびmbuildコマンドは、プレファレンスファイルを以下で検索します。

そのため、mexおよび mbuildの機能をリストアするには、以下のいずれかを行う必要があります。

Linux MEX-ファイル

Release 12では、Linux上でRelease 11 MEX-ファイルをrebuildする必要があります。

GNU標準Cライブラリのバージョン間の互換性の問題のため、Linuxに対しては、MEX-ファイルの拡張子は、.mexglxになっています。Release 11でのファイル拡張子は、.mexlxでした。このファイル拡張子の変更は、LinuxのRelease 11 MEX-ファイルがRelease 12ではrebuildしない限り無視されることを意味します。

SGI MEX-ファイル

SGIにおいて、MATLAB 6.0でMATLAB 5.x C MEX-ファイルを実行するには、rebuildする必要があります。SGIとSGI64 MEX-ファイルとの違いはありません。これらはすべてn32としてビルドされます。

サポートされないコンパイラ

MATLABは、以下のコンパイラをサポートしません。

さらに、The MathWorksはMATLABの将来のバージョンでは、以下のコンパイラのサポートを中止する予定です。The MathWorksは、これらのコンパイラについてテストを行いません。

ActiveXコントロール用のmoveコマンドの利用

MATLABの旧バージョンでは、moveコマンドは、最初の2つの出力引数を逆の順番で出力しました。以下のコマンド

では、出力値posは、[y x xsize ysize]でしたが、これは
[x y xsize ysize]であるべきでした。

これは、MATLAB 6.0では修正されています。MATLABの旧バージョンで逆の順番になるようにコードを変更した場合には、MATLAB 6.0用にこれらの変数の順番を修正する必要があります。

ActiveXオブジェクトでのメソッド呼び出しに対する出力値

MATLABの旧リリースでは、ActiveXオブジェクトについてメソッドを呼び出すと、常にタイプdoubleの値を出力しました。以下の例を考えます。

int32の値をvalに出力する代わりに、MATLABはCOM から得られるオブジェクトのタイプをdoubleに変換しました。

MATLAB 6.0は、メソッド呼び出し中にCOMから渡されたものと同じタイプのオブジェクトを出力します。たとえば、R12では、valdoubleではなくint32の値です。

これは、あるメソッドに対するメソッドのシグネチャと一致させるため行われました。インタフェースのすべてのメソッドのシグネチャは、ActiveXオブジェクトのハンドルについてinvokeを利用することによって得ることができます。たとえば、

は、mwsampコントロール用のすべてのメソッドとシグネチャの一覧を出力します。

MATLABが出力値をdoubleに変換する従来の挙動を行いたい場合は、変換したいメソッドパラメータについてdoubleを明示的に呼び出す必要があります。たとえば、

は、従来の挙動になります。

関数mexは、正確なエラー状況を出力します。

mexのシンタックス

は、エラー状況を検出した場合は、エラーを出力します。

mexのシンタックス

は、エラー状況を検出した場合は、非ゼロの値を stat に出力します。

従来は、Microsoft Windowsプラットフォームでは、mexはエラーが実際に発生したかどうかにかかわらず、常に正常終了するか、あるいはゼロ(成功を示す)を出力しました。

Release 12以前のコードがRelease 12で正常に動作することを確認するには、エラー状況を処理するtry/catchロジックを使うか、あるいは、エラーを出力せずにエラー状況を出力するmex形式を使ってください。

あるいは

GUI-インタラクティブなアプリケーションでのengEvalStringの利用

MATLABエンジンを通じて多くのコールバックを実行する集約的なグラフィカルユーザインタフェース(GUI)アプリケーションがある場合は、これらのコールバックをベースワークスペースのコンテキストで実行する必要があります。evalinを使って以下のようにベースワークスペースがコールバック表現の実行に利用されることを指定します。

この方法でベースワークスペースを指定することにより、MATLABはコールバックを正しく処理し、その呼び出しに対する結果を出力することを保証します。

これは、コールバックを実行しない計算アプリケーションには適用されません。

GLINUXにおけるgdbでのMATLABの起動

GLINUXシステム上でgdbを使ってMATLABをデバッグする場合、セッションは、新規のスレッドを作成するたびに実行を中止します。システムにSIGCONTイベントにおいて中止しないように指示することにより、この割り込みを避けることができます。その後でnodesktopモードを使ってMATLABコードのデバッグを続行することができます。新規のスレッドの作成のたびに通知されますが、セッションは割り込みなして実行を継続します。

以下のステートメントをgdbで利用すると、SIGCONTイベントにおいてトリガをオフにします。

SIGCONT nostopを指定せずにgdbにおいてデバッグを選択することは可能ですが、セッションを進行させるためには、各割り込みにおいてcontinueを入力する必要があります。以下は、SIGCONT nostopが指定されるデバッグセッションの例です。

MEX-ファイル拡張子の変更

MEX-ファイル拡張子は、MATLAB 6.0ではLinux, SGI, HP700プラットフォームに対して変更されています。

プラットフォーム
6.0以前の拡張子
MATLAB 6.0での拡張子
Linux
.mexlx
.mexglx
SGI
.mexsg
.mexsg (変更なし)
SGI64
.mexsg64
.mexsg
HPUX 11.x
.mexhp7
.mexhpux
HPUX 10.20
.mexhp7
.mexhp7 (変更なし)

廃止されたC言語MEXファンクション

以下のAPI関数は、廃止され、MATLABプログラムで利用しないようにして下さい。この関数は、将来のMATLABのリリースでは利用できない場合があります。


プログラミングとデータタイプの問題 グラフィカルユーザインタフェースの作成- アップグレードの問題