非托管代码调用导致WCF进程崩溃

时间:2011-08-15 18:57:39

标签: c# .net c++-cli unmanaged managed-c++

我有一个类,其中包含通过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位平台上运行。

有什么想法吗?

干杯, 多伦。

3 个答案:

答案 0 :(得分:1)

您在非托管代码中的某处调用了未定义的行为。

答案 1 :(得分:1)

似乎问题隐藏在非托管代码中,这是第三方代码,在这种情况下有一个错误并崩溃。

答案 2 :(得分:0)

这是一个完全疯狂的猜测,但不应该固定chars指针吗?

pin_ptr<const wchar_t> chars = ...

另一个疯狂猜测:在非托管呼叫之后,是否需要使用GC::KeepAlive( chars );保持活动状态?