字符串参数未在发布模式下传递

时间:2010-12-06 04:45:16

标签: windows visual-studio-2008 c++-cli 64-bit marshalling

我有一个使用VS2008构建的C ++ / CLI库,它使用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平台编译此代码。

我目前遇到的问题是:当代码在Debug模式下构建时,它运行没有任何问题。当代码在Release模式下构建时,本机指针(_ctx)抛出一个异常,基本上说没有赋值给变量_ns,尽管我已经能够在调试器中确认该值确实存在。

换句话说,本机代码在调试模式下运行正常,但在发布模式下它会失败,因为值在本机代码中显示为空白。

在发布模式或marshal_as模板中是否存在导致问题的问题?有没有人遇到过这种问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

结果发布库已链接到C ++ - &gt;代码生成设置中的多线程调试 DLL(/ MDd),而不是正确的多线程DLL(/ MD) )在项目设置中。