DLL Hell: SnacNp64.dll + gtkD - PullRequest
       15

DLL Hell: SnacNp64.dll + gtkD

2 голосов
/ 22 июля 2010

Очевидно, что когда я запускаю некоторые 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 ни при каких обстоятельствах?

...