Welcome

首页 / 软件开发 / C# / C#调用Haskell时的“尝试读取或写入受保护的内存”问题

C#调用Haskell时的“尝试读取或写入受保护的内存”问题2014-10-01 cnblogs dudu最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C#调用haskell时的“尝试读取或写入受保护的内存”问题),而且困在其中,越陷超深,无法自拔,差点弃用C#解决我们面临的问题。

问题是这样的,只要在Haskell代码中对字符串进行操作,在C#调用时就会引发异常:

An unhandled exception of type "System.AccessViolationException" occurred in Unknown Module.

Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

示例Haskell代码如下:

如果直接返回字符串,则一切正常,示例Haskell代码如下:

C#调用示例代码:

class Native{[DllImport("libpandoc", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]public static extern IntPtr markdownToHtml(byte[] markdown);} public class Processor {public string Process(string text){var intPtr = Native.markdownToHtml(System.Text.Encoding.UTF8.GetBytes(text));var html =Marshal.PtrToStringAnsi(intPtr);return html;} }