2012-02-08 101 views
0

时候会有AccessViolationException当我传递一个struct一些PInvoke方法,我会收到错误为什么使用结构,而不是

未处理的异常:System.AccessViolationException:尝试读取或写入 保护记忆。这通常表明其他内存已损坏。

当我使用类,那么它是确定的。

我想知道背后的任何原因?

+4

完全取决于有问题的代码。 – SLaks 2012-02-08 15:29:46

+0

如果您将结构传递给按值传递参数,则其值将被复制。如果你传递一个类,那么这个类的引用就会被复制。为了能够给你一个正确的答案,我们需要知道你所处的情况。 – haiyyu 2012-02-08 15:35:54

+0

你想要使用哪种方法进行PInvoke以及你的结构定义是什么样的? – 2012-02-08 15:36:49

回答

1

this文章MSDN状态:

默认情况下,本地和管理结构在 内存不同的布局,如此成功地横穿管理的 结构/非托管边界需要额外的措施来保护数据 完整性。

您还可以在那里使用PInvoke时找到可以派上用场的其他信息。

相关问题