2014-10-23 5 views
1

Я скопировал более новую версию GdiPlus.dll в каталог моих проектов. Однако окна всегда загружает его формыКак заставить DLL загружать из текущего каталога

"C: \ WINDOWS \ WinSxS \ x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.6002.23084_x-ww_f3f35550 \ Gdiplus.dll"

Я на XP.

+0

['порядок поиска'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586 (v = vs.85) .aspx) выбирает библиотеку из двоичной папки вашего проекта во-первых, поместите эту библиотеку в ваш exe, и она должна быть загружена оттуда. – TLama

+0

@TLama, он есть в моем каталоге проектов с моим EXE. – zig

ответ

0

Чтобы полностью контролировать загрузку DLL, пройдите полный путь DLL до LoadLibrary.

Это жизнеспособно, если вы используете связь времени исполнения. Для привязки времени загрузки вы зависите от порядка поиска DLL. Первое, что искали, это каталог, из которого загружается exe. Тем не менее, вполне вероятно, что для компонента ОС, такого как GDI +, вероятно, что система будет использовать SxS DLL независимо от того, что.

Ваш заголовок вопроса говорит «текущий каталог», но вы никогда не хотите полагаться на значение текущего каталога при связывании библиотек DLL. Значение текущего каталога непредсказуемо.

Наконец, GDI + является системным компонентом, и я думаю, что сомнительно, что предоставление вашей собственной GDI + DLL - это мудрый шаг. Это вполне возможно незаконно с redistribution of GDI+ is not permitted. Возможно, вы выбрали неправильное решение своей проблемы.

+0

GDI + статически связан с exe. нет 'LoadLibrary'. Я попытался «LoadLibrary (path_to_my_dll)» в разделе инициализации, но это просто загрузить 2 dll gdiplus. в отношении вашего «Наконец» я видел много программ, распространяемых с помощью «gdiplus.dll». вы можете быть правы в выборе этого решения, но я только хочу проверить что-то на данный момент. то почему же GDI + работает нормально в Vista, но не на XP. – zig

+0

И, к сожалению, я имел в виду текущий каталог проектов, содержащий мой EXE. – zig

+0

Это противоречит EULA для перераспределения Vista или более поздней версии GDI + DLL на XP. Я думаю, вам нужно найти другой способ решения вашей проблемы. –

0

Вы можете использовать это объявление, чтобы установить каталог dll в определенный путь.

function SetDllDirectory(lpPathName:PWideChar): Bool; stdcall; external 'kernel32.dll' name 'SetDllDirectoryW'; 

запомнить изменить путь после работы с dll.

+2

Эта функция не делает то, что вы, кажется, утверждаете, что она делает. Это описано здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686203.aspx –

Смежные вопросы