Dragokas

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,054
Реакции
5,846
Баллы
648
C++:
#pragma comment(lib,"curl\curl.lib")
прописывал?

Загружать явно не вариант?
Путь поиска DLL можно будет сменить через функцию SetDllDirectory или в самой LoadLibrary.
 
Alex1983

Alex1983

Разработчик
Сообщения
914
Реакции
443
Баллы
488
C++:
#pragma comment(lib,"curl\curl.lib")
прописывал?

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

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,054
Реакции
5,846
Баллы
648
VI ?

Если батником, то тебе достаточно изменить рабочий каталог перед запуском:
Код:
start "" /D "%~dp0curl" "%~dpИмя_твоей_программы.exe"
См. Порядок поиска DLL.
Если программа предполагает создание ярлыка, ты можешь задать этот каталог в самом ярлыке.
 
Alex1983

Alex1983

Разработчик
Сообщения
914
Реакции
443
Баллы
488
Access Violation:Biggrin:
Если батником, то тебе достаточно изменить рабочий каталог перед запуском:
Вот я и хотел,что бы батник в переменной среде PATH добавил путь моих dll. Но как понимаю, этот код делает другое.
Знаю порядок.
Если программа предполагает создание ярлыка, ты можешь задать этот каталог в самом ярлыке.
Не много не понял, как она начнет выполняться, если всех dll нет?
 
Последнее редактирование:
Dragokas

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,054
Реакции
5,846
Баллы
648
Вот я и хотел,что бы батник в переменной среде PATH добавил путь моих dll. Но как понимаю, этот код делает другое.
Зачем выбивать дверь, потом вставлять ее обратно, если можно зайти с другой стороны?
Этот код делает именно то, что я сказал. Изменяет рабочий каталог, и как видно, запускает программу "Имя_твоей_программы.exe",
которая находится рядом с батником.
Не много не понял, как она начнет выполняться, если всех dll нет?
Ты о чем? Рядом у тебя должен быть каталог curl, а в нем curl.dll
Оказывается этот порядок еще можно изменить через манифест.
Значит что-то делаешь не так. Тут я не помогу, т.к. не знаю особеностей работы с потоками.
 
Alex1983

Alex1983

Разработчик
Сообщения
914
Реакции
443
Баллы
488
Всем спасибо. Я не много сделал по другому.
А именно в главной форме прописал LoadLibrary() и FreeLibrary().
А в поток передаю HINSTANCE OpenLibraryDll. которую получил от LoadLibrary()

Тему можно считать решенной. Всем спасибо за наводку.
 
Drongo

Drongo

Ассоциация VN/VIP
Разработчик
Сообщения
7,844
Реакции
5,590
Баллы
808
Но даже если есть папка 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);
}
Компилим проект. Шрифт будет в ресурсах и при запуске приложения будет извлекаться в папку с прогой.
___________
Или если не то, то Проект -> Добавить к проекту может поможет?

Просто не спеша подробно напиши что есть и что ты хочешь получить.
 
Alex1983

Alex1983

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

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

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

Alex1983

Разработчик
Сообщения
914
Реакции
443
Баллы
488
Вопрос решил через установку текущей директории
Код:
TDirectory::SetCurrentDirectoryA(Dir);
 
Dragokas

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,054
Реакции
5,846
Баллы
648
Что и советовал сделать. -)
 
Сверху Снизу