我试图从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);
在调用函数时,我收到以下错误: 尝试读取或写入受保护的内存错误
非常感谢任何帮助。
由于
答案 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);