R12 Release Notes | ![]() ![]() |
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
コマンドは、以下にあるプレファレンスファイルを検索します。
C:\Winnt\profiles\<user>\application data\mathworks\matlab\R12
C:\Winnt\profiles\<user>\application data\mathworks\matlab
UNIXプラットフォームでは、mex
およびmbuild
コマンドは、プレファレンスファイルを以下で検索します。
/home/<user>/.matlab/R12
そのため、mex
および mbuild
の機能をリストアするには、以下のいずれかを行う必要があります。
mex -setup
および(または)mbuild -setup
(簡易)を実行する、あるいは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
としてビルドされます。
サポートされないコンパイラ
さらに、The MathWorksはMATLABの将来のバージョンでは、以下のコンパイラのサポートを中止する予定です。The MathWorksは、これらのコンパイラについてテストを行いません。
ActiveXコントロール用のmoveコマンドの利用
MATLABの旧バージョンでは、moveコマンドは、最初の2つの出力引数を逆の順番で出力しました。以下のコマンド
pos = move(h);
では、出力値pos
は、[y x xsize ysize]
でしたが、これは[x y xsize ysize]
であるべきでした。
これは、MATLAB 6.0では修正されています。MATLABの旧バージョンで逆の順番になるようにコードを変更した場合には、MATLAB 6.0用にこれらの変数の順番を修正する必要があります。
ActiveXオブジェクトでのメソッド呼び出しに対する出力値
MATLABの旧リリースでは、ActiveXオブジェクトについてメソッドを呼び出すと、常にタイプdouble
の値を出力しました。以下の例を考えます。
h = actxcontrol('MWSAMP.MwsampCtrl.1'); val = invoke(h, 'GetI4');
int32
の値をval
に出力する代わりに、MATLABはCOM から得られるオブジェクトのタイプをdouble
に変換しました。
MATLAB 6.0は、メソッド呼び出し中にCOMから渡されたものと同じタイプのオブジェクトを出力します。たとえば、R12では、val
はdouble
ではなくint32
の値です。
これは、あるメソッドに対するメソッドのシグネチャと一致させるため行われました。インタフェースのすべてのメソッドのシグネチャは、ActiveXオブジェクトのハンドルについてinvoke
を利用することによって得ることができます。たとえば、
invoke(h)
は、mwsamp
コントロール用のすべてのメソッドとシグネチャの一覧を出力します。
MATLABが出力値をdouble
に変換する従来の挙動を行いたい場合は、変換したいメソッドパラメータについてdouble
を明示的に呼び出す必要があります。たとえば、
val = double(invoke(h,'GetI4'));
関数mexは、正確なエラー状況を出力します。
mex myprog.c
stat = mex('myprog.c')
は、エラー状況を検出した場合は、非ゼロの値を stat に出力します。
従来は、Microsoft Windowsプラットフォームでは、mex
はエラーが実際に発生したかどうかにかかわらず、常に正常終了するか、あるいはゼロ(成功を示す)を出力しました。
Release 12以前のコードがRelease 12で正常に動作することを確認するには、エラー状況を処理するtry/catch
ロジックを使うか、あるいは、エラーを出力せずにエラー状況を出力するmex
形式を使ってください。
try mex something.c catch disp(`something failed'); end
status = mex(`something.c'); if status ~= 0 disp(`something failed'); end
GUI-インタラクティブなアプリケーションでのengEvalStringの利用
MATLABエンジンを通じて多くのコールバックを実行する集約的なグラフィカルユーザインタフェース(GUI)アプリケーションがある場合は、これらのコールバックをベースワークスペースのコンテキストで実行する必要があります。evalin
を使って以下のようにベースワークスペースがコールバック表現の実行に利用されることを指定します。
engEvalString(ep, "evalin('base', expression)")
この方法でベースワークスペースを指定することにより、MATLABはコールバックを正しく処理し、その呼び出しに対する結果を出力することを保証します。
これは、コールバックを実行しない計算アプリケーションには適用されません。
GLINUXにおけるgdbでのMATLABの起動
GLINUXシステム上でgdb
を使ってMATLABをデバッグする場合、セッションは、新規のスレッドを作成するたびに実行を中止します。システムにSIGCONT
イベントにおいて中止しないように指示することにより、この割り込みを避けることができます。その後でnodesktop
モードを使ってMATLABコードのデバッグを続行することができます。新規のスレッドの作成のたびに通知されますが、セッションは割り込みなして実行を継続します。
以下のステートメントをgdb
で利用すると、SIGCONT
イベントにおいてトリガをオフにします。
handle SIGCONT nostop
SIGCONT nostop
を指定せずにgdb
においてデバッグを選択することは可能ですが、セッションを進行させるためには、各割り込みにおいてcontinue
を入力する必要があります。以下は、SIGCONT
nostop
が指定されるデバッグセッションの例です。
% matlab -Dgdb (gdb) handle SIGCONT nostop Signal Stop Print Pass to program Description SIGCONT No Yes Yes Continued (gdb) run -nodesktop [New Thread 4219] Program received signal SIGCONT, Continued. [New Thread 4220] Program received signal SIGCONT, Continued. . . .
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のリリースでは利用できない場合があります。
mexAddFlops
![]() | プログラミングとデータタイプの問題 | グラフィカルユーザインタフェースの作成- アップグレードの問題 | ![]() |