返回从本机C ++调用编组的System :: String时崩溃

时间:2016-08-25 15:41:44

标签: c++ c++-cli marshalling

我有一个本机C ++ dll,我从一个从C#应用程序调用的托管c ++ dll调用。

本机dll中的函数看起来像这样:

std::string NativeClass::Test()
{
    return std::string("some string");
}

调用它的托管C ++函数看起来像这样

String ^ ManagedClass::Test()
{
    std::string temp = this->_native->Test();
    String^ sRet = msclr::interop::marshal_as<String^>(temp);

    return sRet; // crashes here !!!
}

但是,在执行return语句时,应用程序崩溃并出现错误,如

Debug Assertion Failed!
debug_heap.cpp
Line 980
Expression: __acrt_first_block == header

我遍布Stackoverflow,但我还没有解决它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

汉斯帮助解决了这个问题。这确实是原生dll和托管dll中的CRT版本之间的不匹配。我确信我已经检查了这个,但很明显错过了。否则代码按原样运行。谢谢。