Matlab MEX文件和C++动态链接库(Windows)

3

我有一个带有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 *)',则一切正常。


@David Heffernan: Visual Studio 2008 (VC9) - Boris
1个回答

5
问题如下:
libmex.dll(以及整个Matlab 2010a / 2010b)使用Microsoft.VC80.CRT(version=8.0.50727.4053)
但是您的Visual Studio使用Microsoft.VC90.CRT(version=9.0.21022.8)

如果您编写C ++ mex文件,则需要在mex dll中使用与matlab相同版本的CRT lib。 您可以免费安装Visual C++ 2005(SP1)Express Edition,并使用它来编译mex文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接