我有一个类,其中包含通过C ++ \ CLI包装器调用非托管代码的托管代码。 在控制台应用程序中运行类时不会产生错误 但是当我用WCF服务将其包装起来时,当代码到达调用非托管代码时,应用程序崩溃了。
问题在于将const wchar_t *变量作为输入传递给非托管代码:
String^ text = … // Unicode Encoded text;
const wchar_t* chars = reinterpret_cast<const wchar_t*> ((Marshal::StringToHGlobalUni(string)).ToPointer());
unmanaged_class::Process(chars);
也试了这个没有运气:
pin_ptr<const wchar_t> chars = ...
应用程序刚关闭,没有任何异常。
我正在使用.NET 4.0开发Windows Server 2008 64位计算机 该应用程序配置为在64位平台上运行。
有什么想法吗?
干杯, 多伦。
答案 0 :(得分:1)
您在非托管代码中的某处调用了未定义的行为。
答案 1 :(得分:1)
似乎问题隐藏在非托管代码中,这是第三方代码,在这种情况下有一个错误并崩溃。
答案 2 :(得分:0)
这是一个完全疯狂的猜测,但不应该固定chars
指针吗?
pin_ptr<const wchar_t> chars = ...
另一个疯狂猜测:在非托管呼叫之后,是否需要使用GC::KeepAlive( chars );
保持活动状态?