C DllImport错误System.AccessViolationException尝试读取或写入受保护的内存

时间:2013-04-17 10:08:34

标签: c# dllimport output-parameter

我有一个C DLL,我将其用于C#代码(.net 4.0)当我访问C方法时,它会引发异常

System.AccessViolationException {"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."}

在这里,我将向您详细介绍C代码和C#代码

C代码:

__declspec(dllexport) int SampleFunction(int **p_StackIndexes)
{
    printf("value1: %d: ", p_StackIndexes[0][0]);
    return 1;
}

C#代码

[DllImport(@"cpp.dll", CallingConvention = CallingConvention.Cdecl)]
unsafe private static extern UInt16 SampleFunction(
    out int[,] p_StackIndexes
);

unsafe static void Main(string[] args)
{
    unsafe
    {
        int[,] p_StackIndexes = new int[3, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 } };
        int x = SampleFunction(out p_StackIndexes);  //This line raises said exception
    }
}

我已经尝试过像StdCall,Cdecl,Winapi这样的所有CallingConvention,但这在任何情况下都不起作用。

我的代码有什么问题? 请注意,我的基本要求是使用输出参数,所以基本上我将在C代码中为输出参数分配一些值,然后从C#代码访问它。

如果您可以提供任何示例代码,那么它将会很有帮助。

谢谢, 基兰

0 个答案:

没有答案