deloytool を使用して Matlab から C++ 共有ライブラリを作成し、MVS で使用したいと考えています。関数名 'foo.m' をコンパイルすると、ファイルのリスト (.h、.cpp、.lib、...) が得られ、'fooCpplib.h' の関数は次のようになります。
extern LIB_fooCpplib_CPP_API void MW_CALL_CONV foo(int nargout, mwArray& y, const mwArray& x);
次に、MVS プロジェクト (2010)、ウィンドウ フォーム アプリケーション、2 つのテキスト ボックスと 2 つのクリック ボタン、inBox という名前の 1 つのテキスト ボックス、および outBox という名前の別のテキスト ボックスを作成します。button_click 内のコードは次のとおりです。
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
double input = System::Double::Parse(inBox->Text);
mxArray *x_ptr;
mxArray *y_ptr=NULL;
double *y;
// Create an mxArray to input into mlfFoo
x_ptr = mxCreateDoubleScalar(input);
// Call the implementation function
// Note the second input argument should be &y_ptr instead of y_ptr.
foo(1,&y_ptr,x_ptr);
// The return value from mlfFoo is an mxArray.
// Use mxGetpr to get a pointer to data it contains.
y = (double*)mxGetPr(y_ptr);
// display the result in the form
outBox->Text = ""+*y;
//clean up memory
mxDestroyArray(x_ptr);
mxDestroyArray(y_ptr);
}
プロジェクトをビルドすると、次のようなエラーが発生しました。
error C2664: 'foo' : cannot convert parameter 2 from 'mxArray **' to 'mwArray &'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style
cast.
注: .cpp ソース ファイルには既に 'fooCpplib.h' が含まれています。
誰でもこれについて私を助けることができます! ありがとうございました!