【问题标题】:why there will be AccessViolationException when using struct rather than class为什么使用结构而不是类时会有AccessViolationException
【发布时间】:2023-03-15 13:35:01
【问题描述】:

当我将struct 传递给某个PInvoke 方法时,我会收到错误消息

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

当我使用类时,就可以了。

我想知道这背后的原因吗?

【问题讨论】:

  • 这完全取决于有问题的代码。
  • 如果你将一个结构体传递给一个按值传递的参数,它的值会被复制。如果您传递一个类,则对该类的引用将被复制。为了能够给您正确的答案,我们需要了解您所处的情况。
  • 您尝试使用哪种方法 PInvoke 以及您的结构定义是什么样的?

标签: c# c++-cli pinvoke


【解决方案1】:

MSDN 在this 文章中声明:​​

默认情况下,原生结构和托管结构在 内存,因此成功地通过 托管/非托管边界需要额外的步骤来保存数据 完整性。

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

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 2010-09-10
    • 2015-05-29
    • 2017-05-04
    • 1970-01-01
    • 2011-12-06
    • 2021-06-13
    相关资源
    最近更新 更多