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

王朝学院·作者佚名  2016-05-06
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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的一个坑

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航