Matlab Mex файлы и C ++ DLL (Windows) - PullRequest
3 голосов
/ 28 марта 2011

У меня есть DLL с классом Test.Заголовок:

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 *)', все будет работать хорошо.

1 Ответ

5 голосов
/ 28 марта 2011

Проблема заключается в следующем:
libmex.dll (и весь Matlab 2010a / 2010b) использует Microsoft.VC80.CRT (версия = 8.0.50727.4053)
Но ваша Visual Studio использует Microsoft.VC90.CRT (версия = 9.0.21022.8)

Если вы пишете mex-файл C ++, вам нужно использовать ту же версию библиотеки CRT в вашей mex dll, которую использует matlab. Вы можете бесплатно установить Visual C ++ 2005 (SP1) Express Edition и скомпилировать в него файл mex.

...