В един мой проект използвам приложение на Delphi, което динамично зарежда DLL обвивка (експортиране на C-Style функции), която от своя страна е статично свързана с куп DLL файлове на трети страни.
Работи добре на моите тестови машини, но на компютъра на клиентите ми не успя да се инициализира със съобщение за грешка като „Не може да се намери входна точка _somefunction@4AKKZ в TMYlibrary.dll“.
След известно проучване с монитора на процесите на sysinternal разбрах, че Windows първо ще търси DLL файлове в windows/sytem32, така че ако DLL с име, подобно на my DLL, присъства в system32, Windows ще избере това и ще опита за да намеря моите входни точки за функция в него - което ще се провали.
Знаете ли за възможност за промяна на поведението при търсене в DLL на windows?
Допълнителна информация
- [Актуализация] Файлът .exe се намира на най-горното ниво на дървовидната структура на папките на приложението.
- Wrapper и DLL-ите на трети страни се намират в подпапката /bin на папката с моите приложения
- Dev платформата е Windows XP/7, използвайки VS2008 за dll и Delphi 2010 за приложението