0

我有一个 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
    }
}

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

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

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

谢谢,基兰

4

0 回答 0