-1

我正在尝试从 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);

在调用该函数时出现以下错误:尝试读取或写入受保护的内存错误

非常感谢任何帮助。

谢谢

4

1 回答 1

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);
于 2013-04-08T13:44:04.033 回答