您的位置:首页 > 编程语言 > C#

C#调用haskell遭遇Attempted to read or write protected memory

2014-05-05 12:17 603 查看
1. Haskell的代码如下:



上面的代码中readMarkdown与writeHtmlString是pandoc中的函数,newString的作用是将String转换为IO CString。

2. C语言的代码如下:



上面的代码是dll的调用入口。

3. ghc编译出来的头文件如下:



4. 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;
}
}


5. 运行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.


  对应的中文错误信息:


尝试读取或写入受保护的内存。这通常指示其他内存已损坏。


6. 而在ghci中执行直接执行haskell代码能得到正确的结果:



被这个“Attempted to read or write protected memory. ”问题困扰了很长时间,一直未找到解决方法。

【更新】

后来找到了解决方法,详见:困扰多日的C#调用Haskell问题竟然是Windows的一个坑
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐