Показать полную графическую версию : Visual C++ 6.0: Вопрос по DLL...
Нужно сделать программу, которая будет искать в определенной директории все DLL-ки и
выводить их список. А потом загружать выбранную.
В этих DLL должны быть маленькие игры.
При компиляции главной программы не известно сколько будет этих DLL и какие у них будут имена.
Реально ли вообще загрузить функцию(класс) из DLL, о которой при компиляции ничего не известно?
Все эти DLL например могут экспортировать одну функцию, которая будет рисовать окно игры.
Можно ли сделать тоже самое, только с MFC. То есть, чтобы не вручную рисовать окно, а создавать с
использованием компонентов и классов MFC?
vasketsov
21-06-2003, 19:17
DANTIST
Реально ли вообще загрузить функцию(класс) из DLL, о которой при компиляции ничего не известно?
Загрузить функцию(класс) - это как?
Функцию обычно выполняют.
Описание класса обычно используют для создания его экземпляров.
В любом случае, если известен прототип, по которому будет происходить поиск файлов/функций/классов, можно задекларировать это еще до написания первой такой 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 файл.
vasketsov
22-06-2003, 13:56
DANTIST
Скорее всего некорректно собираешь MyDll.dll.
Depends-ом погляди, что и как там экспортируется из нее в итоге. Если будут лишние сивмолы в имени - поищи mangling на rsdn.ru
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.