DLL 地狱:SnacNp64.dll + gtkD

发布于 2024-09-10 16:19:06 字数 720 浏览 9 评论 0原文

显然,当我在安装了 Symantec Endpoint Protection 并映射网络驱动器的 Win64 系统上运行一些使用 gtkD 创建的 32 位应用程序并尝试打开文件对话框时,运行时中的某些内容会尝试加载 64 位 SnacNp64.dll DLL,进入32位地址空间。该 DLL 是 Symantec Endpoint Protection 的一个组件,用于网络工作,因此此错误仅在极少数情况下才会发生。

当我从 Win64 本机控制台运行程序并尝试加载文件对话框时,我得到:

图像文件C:\Program Files (x86)\Symantec\Symantec 端点 Protection\SnacNp64.dll 有效,但是 适用于除 当前机器。选择确定 继续,或取消以使 DLL 失败 负载。

当我选择取消时,一切工作正常,并且程序似乎没有因 DLL 加载失败而受到任何不良影响。当我选择“确定”时,出现访问冲突,大概是因为 gtkD 尝试将 64 位 DLL 加载到 32 位程序中。

然而,当我从 Cygwin 终端而不是本机 Win64 终端运行时,Cygwin 控制台似乎捕获了错误并强制加载 DLL,从而使我的应用程序崩溃。

对于同一台计算机上的其他基于 GTK 的 32 位应用程序(例如 GIMP),似乎不会发生此错误。

基本上,如何绝对确保我的 32 位应用程序在任何情况下都不会尝试加载 64 位 DLL?

Apparently when I run some 32-bit apps I created using gtkD on Win64 systems with Symantec Endpoint Protection installed and network drives mapped, and try to bring up a file dialog, something in the runtime attempts to load SnacNp64.dll, a 64-bit DLL, into 32-bit address space. This DLL is a component of Symantec Endpoint Protection that's used for networking stuff, hence this error only happening under such a narrow set of circumstances.

When I run a program from a Win64 native console and try to load a file dialog, I get:

The image file C:\Program Files
(x86)\Symantec\Symantec Endpoint
Protection\SnacNp64.dll is valid, but
is for a machine type other than the
current machine. Select OK to
continue, or CANCEL to fail the DLL
load.

When I select cancel everything works fine, and the program seems to suffer no ill effects from the DLL failing to load. When I select ok, I get an access violation, presumably because gtkD tries to load a 64-bit DLL into a 32-bit program.

However, when I run from a Cygwin terminal instead of a native Win64 one, it seems that the Cygwin console catches the error and forces the DLL to be loaded, thus crashing my application.

This error does not seem to happen for other 32-bit GTK-based apps, such as GIMP, on the same machines.

Basically, how do I make absolutely sure that my 32-bit app never tries to load a 64-bit DLL under any circumstances?

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文