2011-03-28 80 views
2

我有一個DLL與類Test。 部首:matlab mex文件和C + + 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 *)',一切正常。

+0

哪個編譯器? – 2011-03-28 14:50:50

+0

@David Heffernan:visual studio 2008(vc9) – Boris 2011-03-28 15:03:50

回答

4

問題是這樣的:
libmex.dll(和整個Matlab的2010A/2010年b)使用Microsoft.VC80.CRT(版本= 8.0.50727.4053)
但您的Visual Studio使用Microsoft.VC90.CRT(版本= 9.0.21022.8)

如果你編寫一個C++ mex文件,你需要在你的mex dll中使用相同版本的CRT庫。 您可以免費安裝Visual C++ 2005(SP1)Express Edition,並使用它編譯mex文件。