我想使用 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 的文本框,另一个名为 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”。
谁能帮我解决这个问题!谢谢!