![]() |
Нужно сделать программу, которая будет искать в определенной директории все DLL-ки и
выводить их список. А потом загружать выбранную. В этих DLL должны быть маленькие игры. При компиляции главной программы не известно сколько будет этих DLL и какие у них будут имена. Реально ли вообще загрузить функцию(класс) из DLL, о которой при компиляции ничего не известно? Все эти DLL например могут экспортировать одну функцию, которая будет рисовать окно игры. Можно ли сделать тоже самое, только с MFC. То есть, чтобы не вручную рисовать окно, а создавать с использованием компонентов и классов MFC? |
DANTIST
Цитата:
Функцию обычно выполняют. Описание класса обычно используют для создания его экземпляров. В любом случае, если известен прототип, по которому будет происходить поиск файлов/функций/классов, можно задекларировать это еще до написания первой такой DLL. Например: p = GetProcAddress(hDll, 'MySuperPuperFunction'); PMYSUPERPUPERPROTOTYPE(p)(param1, param2,param3,...); Это если не хочется с интерфейсами связываться и аналогичными решениями. |
Делаю так...
- В DLL пишу: __declspec(dllexport) void MyMessage(void) { MessageBox(NULL, "This Message from DLL!", "!!!", MB_OK); } - В главной программе пишу: __declspec(dllimport) void MyMessage(void); HINSTANCE hDll; FARPROC MyProcAddr; if (( hDll = LoadLibrary("MyDll.dll")) != NULL) { MyProcAddr = GetProcAddress(hDll, "MyMessage"); if (MyProcAddr != NULL) (MyProcAddr)(); else MessageBox(NULL, "MyMessage address not given!", "Error!", MB_OK); } else { MessageBox(NULL, "MyDll.dll not found!", "Error!", MB_OK); } FreeLibrary(hDll); Что не так? Почему не определяется адрес функции? P.S. Я не подключал .lib файл. |
DANTIST
Скорее всего некорректно собираешь MyDll.dll. Depends-ом погляди, что и как там экспортируется из нее в итоге. Если будут лишние сивмолы в имени - поищи mangling на rsdn.ru |
Время: 09:54. |
Время: 09:54.
© OSzone.net 2001-