程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#調用haskell時Attempted to read or write protected memory問題

C#調用haskell時Attempted to read or write protected memory問題

編輯:關於C#

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved