Очевидно, что когда я запускаю некоторые 32-разрядные приложения, созданные мною с помощью gtkD, в системах Win64 с установленным Symantec Endpoint Protection и подключенными сетевыми дисками, и пытаюсь открыть диалоговое окно файла, что-то во время выполнения пытается загрузить SnacNp64.dll,64-битная DLL, в 32-битное адресное пространство.Эта DLL-библиотека является компонентом Symantec Endpoint Protection, который используется для работы в сети, поэтому эта ошибка возникает только при таком узком наборе обстоятельств.
Когда я запускаю программу из собственной консоли Win64 и пытаюсь загрузить файлВ диалоговом окне я получаю:
Файл образа C: \ Program Files (x86) \ Symantec \ Symantec Endpoint Protection \ SnacNp64.dll действителен, но предназначен для типа компьютера, отличного от текущего компьютера.Выберите OK, чтобы продолжить, или ОТМЕНА, чтобы не выполнить загрузку DLL.
Когда я выбираю «Отмена», все работает нормально, и программа, похоже, не страдает от неудачной загрузки DLL.Когда я выбираю ok, я получаю нарушение прав доступа, вероятно потому, что gtkD пытается загрузить 64-битную DLL в 32-битную программу.
Однако, когда я запускаю из терминала Cygwin вместо собственного Win64, похоже, что консоль Cygwin перехватывает ошибку и вынуждает загрузку DLL, что приводит к сбою моего приложения.
Эта ошибка, по-видимому, не возникает для других 32-битных приложений на основе GTK, таких как GIMP,на этих же машинах.
В общем, как я могу быть абсолютно уверен, что мое 32-битное приложение никогда не пытается загрузить 64-битную DLL ни при каких обстоятельствах?