Bor*_*ris 3 c++ dll matlab mex linkage
我有一个带类Test的DLL.标题:
class MY_EXPORT Test
{
public:
int doit(const string &str);
};
和来源:
int
Test::doit(const string &str)
{
return int(str.length());
}
现在我从mex文件中使用它:
void
mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
string str("hello!");
Test *t = new Test();
t ->doit(str);
}
问题是,变量str未正确传递给方法doit.在方法里面它包含拉比.我发现通过引用传递的任何对象都会发生这种情况.我做错了什么?请帮忙.
PS:如果我将声明更改为'int doit(const char*)'一切正常.
问题是:
libmex.dll(和整个Matlab 2010a/2010b)使用Microsoft.VC80.CRT(版本= 8.0.50727.4053)
但您的Visual Studio使用Microsoft.VC90.CRT(版本= 9.0.21022.8)
如果您编写C++ mex文件,则需要在matlab使用的mex dll中使用相同版本的CRT库.您可以免费安装Visual C++ 2005(SP1)Express Edition,并使用它编译mex文件.