Тема: DLL виклики функцiй
Пiдкажiть якийсь туториал як зробити dll яка може викликати функции программи.
Программа може викликати функции dll.
I власне як той dll пiдключити ?
LoadLibrary ?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → DLL виклики функцiй
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Пiдкажiть якийсь туториал як зробити dll яка може викликати функции программи.
Программа може викликати функции dll.
I власне як той dll пiдключити ?
LoadLibrary ?
та ні, якась є АРІ от очно не згадаю, ShellExecuteякось так, а так можна взяти з прикладу
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0
ну і почитати за rundll32.exe
Як підключати ЛЮА докладно описано в .... несподіванка... документації по ЛЮА. Підключення ДЛЛ бувають динамічні (LoadLibrary/GetProcAddress)та статичні (з секції імпорту), але ви того не побачите тільки опції компілера та хідери до сів. Повна документація по ВінАпі та форматам файлів є знову ж таки... несподівано... приготуватися.... в манах од майкрософта, MSDN'ом зветься.
Пiдкажiть якийсь туториал як зробити dll яка може викликати функции программи.
Программа може викликати функции dll.
Гляньте як в MSDN реалізована робота з калбеками. А отут можете глянути про плагіни в Делфі: http://www.gunsmoker.ru/2011/12/delphi.html У вас суть буде та сама. Ви завантажуєте бібліотеку і передаєте їй список посилань на функції, які бібліотека може викликати. В свою чергу бібліотека віддає вам список своїх функцій, які ви маєте викликати при настанні певних подій. Для зручності ці списки можна оформити у інтерфейси (увесь COM тягнути не обов'язково).
Там далі описана робота з GUI, але той підхід можна застосовувати лише якщо з інтерфейсом плагін працює мало. Якщо ж плагіну треба дати можливість глибоко інтегруватися в інтерфейс проги, то, на мій погляд, без скриптового двигуна не обійтися. Скрипти будуть керувати графічними елементами, а коли треба виконати якусь важку дію, викликатимуть функції з плагіна.
Ось приклад:
void FbxImporter::Init() {
m_Library = ::LoadLibrary(IMPORTER_NAME);
}
void FbxImporter::Close() {
if (m_Library) {
::FreeLibrary(m_Library);
m_Library = NULL;
}
const FBX::Scene* FbxImporter::GetScene(const char *filename) {
pfnLoadFbxFile *LoadFbxFile = (pfnLoadFbxFile*)::GetProcAddress(m_Library, "LoadFbxFile");
return LoadFbxFile(filename);
}
void FbxImporter::DeleteScene(FBX::Scene *scene)
{
pfnFreeScene *FreeScene = (pfnFreeScene*)::GetProcAddress(m_Library, "FreeScene");
FreeScene(scene);
}
Ось це в самій dll, але якщо ви не свою dll використовуєте, то типи для функцій вам будуть відомі зі специфікації.
typedef DLL_FUNC const FBX::Scene * (pfnLoadFbxFile)(const char *fbxFilename);
typedef DLL_FUNC void (pfnFreeScene)(const FBX::Scene *scene);
extern "C" DLL_FUNC const FBX::Scene *LoadFbxFile(const char *fbxFilename);
extern "C" DLL_FUNC void FreeScene(const FBX::Scene *scene);
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися