我有一个 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# 代码中访问它。
如果您可以提供任何示例代码,那么它将很有帮助。
谢谢,基兰