3

クラス Test を持つ DLL があります。ヘッダ:

クラス MY_EXPORT テスト
{
公衆:
    int doit(const string &str);
};

およびソース:

整数
Test::doit(const string &str)
{
    int(str.length()); を返します。
}

今、私はmexファイルからそれを使用しています:

空所
mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    string str("こんにちは!");
    テスト *t = 新しい Test();
    t ->doit(文字列);
}

問題は、その変数strがメソッドに正しく渡されないことですdoit。メソッド内にはラビッシュが含まれています。これは、参照によって渡されたすべてのオブジェクトで発生することがわかりました。私が間違っていることは何ですか?助けてください。

PS: 宣言を 'int doit(const char *)' に変更すると、すべて正常に動作します。

4

1 に答える 1

5

問題は次のとおりです
。libmex.dll(およびMatlab 2010a / 2010b全体)はMicrosoft.VC80.CRT(バージョン= 8.0.50727.4053)
を使用しますが、Visual StudioはMicrosoft.VC90.CRT(バージョン= 9.0.21022.8)を使用します

C ++ mexファイルを作成する場合は、matlabが使用するものと同じバージョンのCRTlibをmexdllで使用する必要があります。Visual C ++ 2005(SP1)Express Editionを無料でインストールし、それを使用してmexファイルをコンパイルできます。

于 2011-03-28T17:57:17.800 に答える