为什么使用struct而不是class时会出现AccessViolationException

发布于 2025-01-03 11:45:34 字数 220 浏览 1 评论 0原文

当我将 struct 传递给某些 PInvoke 方法时,我将收到错误

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

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

我想知道这背后有什么原因吗?

When I pass in a struct to some PInvoke method, I will receive the error

Unhandled Exception: System.AccessViolationException: Attempted to read or write
protected memory. This is often an indication that other memory is corrupt.

When I use class, then it is OK.

I want to know any reason behind that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尽揽少女心 2025-01-10 11:45:34

MSDN 在这篇文章中指出:

默认情况下,本机结构和托管结构的布局不同
内存,因此成功地跨过结构传递
托管/非托管边界需要额外的步骤来保存数据
诚信。

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

MSDN states in this article:

By default, native and managed structures are laid out differently in
memory, so successfully passing structures across the
managed/unmanaged boundary requires extra steps to preserve data
integrity.

You will also find additional information that will come in handy when using PInvoke there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文