在 D2006 应用程序中获取外部异常 C0000006 - 如何强制 delphi 加载整个可执行文件?

发布于 2024-11-27 12:43:45 字数 331 浏览 4 评论 0原文

当退出我的应用程序时,我偶尔会收到此消息 - 我的应用程序正在通过网络运行 EXE。据我了解,当部分 EXE 按需加载时,这是一个页面错误。

我还在 TDrawGrid 的 OnDrawCell 方法中观察到了它,所以我很困惑这可能如何导致页面加载。而且,异常不断发生。

所以我的问题是:

错误 C0000006 是否是由其他原因导致的?我对应用程序管理内存的方式进行了相当大的更改,尽管没有什么异常,而且我相信代码的行为正常。

如何使应用程序在启动时将其全部加载到内存中(在 Delphi 2006 中 - 我知道有针对更高版本的 Delphi 的指令)。

TIA

I get this occasionally when exiting my app - my app is running the EXE over a network. I understand it's a page fault when part of the EXE is loaded on demand.

I have also observed it in the OnDrawCell method of a TDrawGrid, so I'm mystified how that might have caused a page load. Also, the exception kept happening.

So my questions:

Can Error C0000006 result from other causes? I have made fairly major changes to the way the app manages memory, though nothing out of the ordinary, and I'm confident the code is behaving.

How can you make the app load all of itself into memory on startup (in Delphi 2006 - I understand there are directives for later versions of Delphi).

TIA

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

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

发布评论

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

评论(3

站稳脚跟 2024-12-04 12:43:45

指令 $SetPEFlags 似乎是 Delphi 2006 的一部分,至少 Hallvard 在 本文在 D2006 环境中。请查看此处了解如何使用它。

The directive $SetPEFlags seems to be part of Delphi 2006, at least Hallvard talks about it in this article in the context of D2006. Have a look here on how to use it.

欢你一世 2024-12-04 12:43:45

我们也经历过这一点。系统将一些可执行页面移出进行交换,但一段时间后无法将其分页回来。这似乎与睡眠后网络连接恢复有关。

我们发现的唯一可行的解​​决方案是在本地计算机上查找可执行文件。

We experience this too. The system puts some of the executable pages out to swap and then fails to page it back some time later. It appears to be related to network connections being restored after sleep.

The only viable solution that we have found is to locate executables on the local machine.

就像说晚安 2024-12-04 12:43:45

如果您的软件从网络驱动器运行,也会经常出现此异常 C0000006。为了防止这个问题,您可以将该标志

{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}

与以下标志结合起来:

IMAGE_FILE_NET_RUN_FROM_SWAP = $0800;

{$SetPEFlags $0C00}

This exception C0000006 also often occurs if your software is run from a network drive. To prevent that problem you can combine the flag

{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}

with the following flag:

IMAGE_FILE_NET_RUN_FROM_SWAP = $0800;

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