строковые параметры не передаются в режиме Release - PullRequest
0 голосов
/ 06 декабря 2010

У меня есть сборка библиотеки 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, который вызывает проблемы здесь?Кто-нибудь сталкивался с такой проблемой раньше?

Спасибо!

1 Ответ

0 голосов
/ 07 декабря 2010

Оказывается, библиотека Release была связана с многопоточной DLL-библиотекой Debug (/ MDd) в настройках C ++ -> Code Generation, в отличие от правильной многопоточной DLL (/ MD) в настройки проекта.

...