我有一个使用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模板中是否存在导致问题的问题?有没有人遇到过这种问题?
谢谢!
答案 0 :(得分:0)
结果发布库已链接到C ++ - &gt;代码生成设置中的多线程调试 DLL(/ MDd),而不是正确的多线程DLL(/ MD) )在项目设置中。