У меня есть сборка библиотеки C ++ / CLI с VS2008, которая использует marshal_as для преобразования параметров метода System :: String в типы std :: string для передачи в параметры метода собственного указателя.Код выглядит очень похоже на это:
System::Void QueryContext::SetNamespace(String^ prefix, String^ uri)
{
std::string _prefix;
if (nullptr != prefix)
{
_prefix = marshal_as<std::string>(prefix);
}
std::string _ns;
if (nullptr != uri)
{
_ns = marshal_as<std::string>(uri);
}
// at this point both variables are confirmed to have values
// at least from within the Locals view in the debugger
_ctx->setNamespace(_prefix,_ns);
}
Этот код компилируется для платформы x64.
Проблема, с которой я сейчас сталкиваюсь, заключается в следующем: когда код создается в режиме отладки, он запускается без проблем.Когда код создается в режиме Release, собственный указатель (_ctx) генерирует исключение, в основном говоря, что значение переменной _ns не назначено, несмотря на то, что я смог подтвердить в отладчике, что значение действительно есть,
Другими словами, собственный код работает нормально в режиме отладки, но в режиме выпуска он завершается сбоем, потому что значения кажутся пустыми внутри собственного кода.или с шаблоном marshal_as, который вызывает проблемы здесь?Кто-нибудь сталкивался с такой проблемой раньше?
Спасибо!