2

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

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

映像文件 C:\Program Files (x86)\Symantec\Symantec Endpoint Protection\SnacNp64.dll 有效,但适用于当前机器以外的机器类型。选择 OK 继续,或 CANCEL 使 DLL 加载失败。

当我选择取消时,一切正常,并且程序似乎没有因 DLL 无法加载而受到任何不良影响。当我选择 ok 时,我遇到了访问冲突,大概是因为 gtkD 试图将 64 位 DLL 加载到 32 位程序中。

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

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

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

4

0 回答 0