Изменить путь загрузки DLL

C++:
#pragma comment(lib,"curl\curl.lib")
прописывал?

Загружать явно не вариант?
Путь поиска DLL можно будет сменить через функцию SetDllDirectory или в самой LoadLibrary.
 
C++:
#pragma comment(lib,"curl\curl.lib")
прописывал?

Загружать явно не вариант?
Путь поиска DLL можно будет сменить через функцию SetDllDirectory или в самой LoadLibrary.
Прописывал.
Динамически загружать в потоке, тоже не ахти (при FreeLibrary() сразу VI), а без нее тоже не айс.
 
VI ?

Если батником, то тебе достаточно изменить рабочий каталог перед запуском:
Код:
start "" /D "%~dp0curl" "%~dpИмя_твоей_программы.exe"
См. Порядок поиска DLL.
Если программа предполагает создание ярлыка, ты можешь задать этот каталог в самом ярлыке.
 
Access Violation:Biggrin:
Если батником, то тебе достаточно изменить рабочий каталог перед запуском:
Вот я и хотел,что бы батник в переменной среде PATH добавил путь моих dll. Но как понимаю, этот код делает другое.
Знаю порядок.
Если программа предполагает создание ярлыка, ты можешь задать этот каталог в самом ярлыке.
Не много не понял, как она начнет выполняться, если всех dll нет?
 
Последнее редактирование:
Вот я и хотел,что бы батник в переменной среде PATH добавил путь моих dll. Но как понимаю, этот код делает другое.
Зачем выбивать дверь, потом вставлять ее обратно, если можно зайти с другой стороны?
Этот код делает именно то, что я сказал. Изменяет рабочий каталог, и как видно, запускает программу "Имя_твоей_программы.exe",
которая находится рядом с батником.
Не много не понял, как она начнет выполняться, если всех dll нет?
Ты о чем? Рядом у тебя должен быть каталог curl, а в нем curl.dll
Оказывается этот порядок еще можно изменить через манифест.
Значит что-то делаешь не так. Тут я не помогу, т.к. не знаю особеностей работы с потоками.
 
Всем спасибо. Я не много сделал по другому.
А именно в главной форме прописал LoadLibrary() и FreeLibrary().
А в поток передаю HINSTANCE OpenLibraryDll. которую получил от LoadLibrary()

Тему можно считать решенной. Всем спасибо за наводку.
 
Но даже если есть папка curl и вней mydll.dll то все равно при зугрузке просит mydll.dll
Можешь написать более подробно? Не пойму. При загрузке чего просит ту длл?

Так не вариант сформировать путь? Где curl любое имя папки
Код:
...
   UnicodeString PathDLL = ExtractFilePath(FileName) + "curl\\mydll.dll";
...
Если же в ресурсы, с последующей распаковкой, то я делал так(шрифт verdana.ttf добавлял):

Создал обычный текстовый файл MyFont.rc, с содержимым
Код:
MY_FONT ANYOL1 "verdana.ttf"
verdana.ttf и MyFont.rc ложим рядом друг с другом. Потом в билдере:
Проект -> Добавить к проекту -> Выбираю тип файла *.rc -> Указываем файл MyFont.rc. Далее код
Код:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
   TResourceStream *res = new TResourceStream((int)HInstance, "MY_FONT", "ANYOL1");
   res->SaveToFile("verdana.ttf");

   AddFontResourceA("verdana.ttf");
   SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
}
Компилим проект. Шрифт будет в ресурсах и при запуске приложения будет извлекаться в папку с прогой.
___________
Или если не то, то Проект -> Добавить к проекту может поможет?

Просто не спеша подробно напиши что есть и что ты хочешь получить.
 
TResourceStream *res = new TResourceStream((int)HInstance, "MY_FONT", "ANYOL1");
Эта функция не находит ресурс. С сделал по другому.
У меня XE6
Можешь написать более подробно? Не пойму. При загрузке чего просит ту длл?

Так не вариант сформировать путь? Где curl любое имя папки
Все очень просто. У меня есть длл, я ее хотел загружать динамически. Если всё делать в главной форме, то всё ок. Но если я заношу все в потоке то сразу AV(Access Violation). Как выяснил причиной стало FreeLibrary()(её убрал и всё ок), но без нее как то не очень (будет в памяти(в счетчике)висеть).

При статической загрузке такого кода нет
C++:
UnicodeString PathDLL = ExtractFilePath(FileName) + "curl\\mydll.dll";
 
Последнее редактирование модератором:
Назад
Сверху Снизу