В моем проекте я использую приложение Delphi, которое динамически загружает DLL-оболочку (экспортируя функции C-Style), которая, в свою очередь, статически связывается с кучей сторонних DLL.
Он отлично работает на моих тестовых машинах, но на компьютере моего клиента он не инициализируется с сообщением об ошибке типа «Не удалось найти точку входа _somefunction@4AKKZ в TMYlibrary.dll».
После некоторого исследования с помощью монитора процессов sysinternal я понял, что Windows сначала будет искать библиотеки DLL в windows/sytem32, поэтому, если DLL с именем, похожим на моя DLL, присутствует в system32, Windows выберет ее и попытается найти в нем свои точки входа в функцию - что не получится.
Знаете ли вы о возможности изменить поведение DLL Windows при поиске?
Дополнительная информация
- [Обновление] Файл .exe находится на верхнем уровне дерева папок приложения.
- Оболочка и сторонние библиотеки DLL находятся в подпапке /bin папки моих приложений.
- Платформа Dev — Windows XP/7, использующая VS2008 для dllll и Delphi 2010 для приложения.