2012-10-16 34 views
2

這是我的DLL導入語句:DLLImport(C代碼)C#試圖讀取或寫入受保護的內存。這通常是一個指示其他內存已損壞」

[DllImport("KaracellLib.dll", EntryPoint = "[email protected]", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true)] 
    public static extern int karacell_bridge(int argumentCount, string[] argContent); 

在本地C代碼的實際函數定義(其被轉換爲一個DLL):

int __stdcall karacell_bridge(int argumentCount, char ** argContent) 

當我嘗試不止一次地在我的C#代碼中調用DLL時,出現上述錯誤。

我曾嘗試以下通過進入工具來解決該錯誤的模塊加載(NLY管理)

  1. 禁止JIT優化 - >調試 - >常規
  2. 增加裁判在C#DLL導入定義:public static extern int karacell_bridge(int argumentCount, ref string[] argContent);

任何幫助表示讚賞!謝謝!

+0

'int'不是函數定義。 (提示:注意格式化!) – 2012-10-16 05:47:26

+0

char ** argContent - 顯示本地C調用此函數。聲明不足以編寫正確的代碼。 –

+0

當您嘗試訪問C中的'argContent'或者當您從C#調用函數時,查看是否發生問題? –

回答

0

問題是因爲多個線程在C#程序中調用karacell_bridge函數。因此,一旦我照顧它,異常就修復了:)

相關問題