从C#应用程序调用C ++函数。尝试读取或写入受保护的内存错误

时间:2013-04-08 02:37:04

标签: c# c++ pinvoke

我试图从C#控制台应用程序调用C ++函数。

这是C ++函数

extern int mpsCheck(mpsHandlePtr handle);

其中mpsHandlePtr定义为

typedef struct  mpsHandleRec *mpsHandlePtr;

在我的C#中,我使用以下语法

[DllImport("test.dll", EntryPoint = "mpsCheck", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern int mpsCheck(ref System.IntPtr handle);

在调用函数时,我收到以下错误: 尝试读取或写入受保护的内存错误

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

您需要在C#中声明您的结构,然后将其传递给该函数。像这样:

[StructLayout(LayoutKind.Sequential)]
struct mpsHandleRec 
{
     // fields go here
}

[DllImport("test.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpsCheck(ref mpsHandleRec handle);

或者,如果您只有一个指向结构的不透明指针,则省略结构声明并传递不透明指针:

[DllImport("test.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpsCheck(IntPtr handle);