Использование DLL
Можно ли реализовать следующее?
Из программы вызывается внешняя процедура, расположенная в DLL библиотеке.
Причем имя DLL файла известно только после запуска программы.
Индекс,имя и параметры процедуры известны.
Если DLL файл отстутствует, то процедура не вызывается.
Hi ALL!
Можно ли реализовать следующее?
Из программы вызывается внешняя процедура, расположенная в DLL библиотеке.
Причем имя DLL файла известно только после запуска программы.
Индекс,имя и параметры процедуры известны.
Если DLL файл отстутствует, то процедура не вызывается.
А что тут сложного? Используй динамическое подключение библиотеки... еще вопросы? :)
Если хош, могу оставить примерчик...:) 8)
А что тут сложного? Используй динамическое подключение библиотеки... еще вопросы? :)
Если хош, могу оставить примерчик...:) 8)
Только одина вопрос: как правильно выгрузить DLL из памяти? Если пишу просто FreeLibrary('DllName.dll') то ПОСЛЕ закрытия приложения вылетаю с AccessViolation(как увидел в CPU View - на одном из вызовов TObject.Free)
Только одина вопрос: как правильно выгрузить DLL из памяти? Если пишу просто FreeLibrary('DllName.dll') то ПОСЛЕ закрытия приложения вылетаю с AccessViolation(как увидел в CPU View - на одном из вызовов TObject.Free)
Вот примерчик, кстать, из этого форума:
Создаеш DLL, в ней пишу:
extern "C" void __declspec(dllexport) Message(char *s) {
Application->MessageBox(s,"From DLL",IDOK);
}
Потом создаешь проект и подгружаешь динамически DLL:
void __fastcall TForm1::Button1Click(TObject *Sender) {
void (__stdcall *Message)(char *s);
HINSTANCE dllp = LoadLibrary("p.dll");
if (dllp) {
Message= (void(__stdcall *) (char*))
GetProcAddress(dllp, "_Message");
if (Message) Message("Hi From Dinamic DLL");
}
FreeLibrary(dllp);
}
Должно работать...