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