2012-04-26 16 views
2

私はcalllibを使ってMatlabコードから呼び出すC++ DLLを持っています。 入力パラメータのみを持つC++関数、またはmxArrayを返す関数を呼び出すのに問題はありません。Matlabから複数の出力を持つC++関数を呼び出す方法は?

今、いくつかの出力パラメータを持つ関数を呼び出すのに問題があります。たとえば、行列と整数を返すこのMatlab関数のC++に相当するものが必要です。私が試したものは何でも

function [matrix, status] = foo() 
status = 42; 
matrix = ones(3,2); 
end 

、それは例えば、Matlabのクラッシュを行います

DLL_API void foo(mxArray* iop_matrix, int* op_status) 
    { 
    mxSetM(iop_matrix, 3); 
    mxSetN(iop_matrix, 2); 
    *op_status = 42; 
    } 

私が唯一の出力パラメータを必要とするとき、私は簡単に

DLL_API mxArray* foo(void) 
    { 
    return mxCreateNumericMatrix(3, 2, mxDOUBLE_CLASS, mxREAL); 
    } 

それが動作するように得ることができるがある何そのような関数のC++での正しい実装ですか?

答えて

3

Matlab関数の1番目の出力パラメータは、C関数の出力パラメータとして宣言する必要があります。 Matlab関数の2番目の出力パラメータは、mxArray **型を持つC関数の1番目の入力パラメータとして宣言する必要があります。関数は、関数が

mxArray *foo(mxArray **matrix, mxArray *_1stInpParam, mxArray *_2ndInpParam);

として宣言され、この場合には入力パラメータが含まれている場合、いくつかの出力パラメータを持つ

A C++関数は

mxArray *foo(mxArray **matrix);

のようになります。

関連する問題