Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Visual C++ 6.0: Вопрос по DLL... (http://forum.oszone.net/showthread.php?t=30445)

DANTIST 20-06-2003 20:28 208671

Нужно сделать программу, которая будет искать в определенной директории все DLL-ки и
выводить их список. А потом загружать выбранную.
В этих DLL должны быть маленькие игры.
При компиляции главной программы не известно сколько будет этих DLL и какие у них будут имена.

Реально ли вообще загрузить функцию(класс) из DLL, о которой при компиляции ничего не известно?
Все эти DLL например могут экспортировать одну функцию, которая будет рисовать окно игры.

Можно ли сделать тоже самое, только с MFC. То есть, чтобы не вручную рисовать окно, а создавать с
использованием компонентов и классов MFC?

vasketsov 21-06-2003 19:17 208672

DANTIST
Цитата:

Реально ли вообще загрузить функцию(класс) из DLL, о которой при компиляции ничего не известно?
Загрузить функцию(класс) - это как?
Функцию обычно выполняют.
Описание класса обычно используют для создания его экземпляров.

В любом случае, если известен прототип, по которому будет происходить поиск файлов/функций/классов, можно задекларировать это еще до написания первой такой DLL.

Например:

p = GetProcAddress(hDll, 'MySuperPuperFunction');
PMYSUPERPUPERPROTOTYPE(p)(param1, param2,param3,...);

Это если не хочется с интерфейсами связываться и аналогичными решениями.

DANTIST 22-06-2003 02:44 208673

Делаю так...

- В 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 208674

DANTIST
Скорее всего некорректно собираешь MyDll.dll.
Depends-ом погляди, что и как там экспортируется из нее в итоге. Если будут лишние сивмолы в имени - поищи mangling на rsdn.ru


Время: 09:54.

Время: 09:54.
© OSzone.net 2001-