Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Определение класса в DLL - ипользование вне и динамически - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Програмное включение и выключение монитора http://www.cyberforum.ru/cpp-beginners/thread505767.html
Как можно програмно включить/выключить монитор через windows? Как я понял, это делается с помощью сигналов верт./гориз. синхронизации. Я нашел следующую таблицу <TABLE cellSpacing=1 width=768...
C++ Алгоритм Цезаря Здраствуйте, я очень надеюсь что вы мне поможете! Мне нужно написать алгоритм шифрования и дешифрования Цезаря Алгоритм такой: Берем i-ый символ и заменяем его на i+{шаг}, где шаг... http://www.cyberforum.ru/cpp-beginners/thread505685.html
C++ Компонент для просмотра файлов и папок
Здравствуйте уважаемые участники форума! Мне необходим компонент для просмотра файлов и папок типа OpenDialog или SaveDialog. Компонент должен размещаться на форме (не как диалоговое окно). Какой...
Класс в отдельный файл C++
Подскажите, как сделать...вот есть у мня класс, как его сохранить, чтоб можно было использовать в других программах...и непосредственно, как использовать..?
C++ Пара вопросов о регионах http://www.cyberforum.ru/cpp-beginners/thread505143.html
1. они одинаково срабатывают и при SDI и Dialog ? 2. Куда надо засовывать вызов функции работающей с регионами? В конструктор класса диалога, в OnInitDialog()...
C++ Наложение изображений друг на друга Всё-таки как? Я вот смотрела функции класса CDC - PatBit,StretchBit,BitBit - в описании есть такие строки: BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc,... подробнее

Показать сообщение отдельно
kpoxa
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213

Определение класса в DLL - ипользование вне и динамически - C++

06.10.2006, 21:45. Просмотров 2967. Ответов 6
Метки (Все метки)

Однажды я уже задавал подобный ворос, ответа так и не получил. В свое время я обошелся без использования классов из DLL, но сейчас вновь возникла необходимость и обойтись не получится.
Скажем в DLL есть такой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <windows.h>
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
class DLL_API CMyDllObject{
public:
 CMyDllObject(void);
 void Say(LPSTR msg) ;
};
 
CMyDllObject::CMyDllObject()
{
}
void CMyDllObject::Say(LPSTR msg)
{
    MessageBox(0, msg, "My DLL",0);
}
extern "C" DLL_API CMyDllObject* CreateMyObject()
{
    return new CMyDllObject();
} 
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
      )
{
    switch (ul_reason_for_call)
 {
  case DLL_PROCESS_ATTACH:
  case DLL_THREAD_ATTACH:
  case DLL_THREAD_DETACH:
  case DLL_PROCESS_DETACH:
   break;
    }
    return TRUE;
}
Конечно декларацию класса можно перенести и в отдельный файл, но на данный момент это не имеет отношения к делу.
Мне надо в основном проекте создать объект класса CMyDllObject, при этом статическое линкование не подходит, так как я не знаю какую DLL буду загружать (есть несколько одинаковых по функциональности, но действие разное). Пользователь выбирает, что будет использоваться в данный момент.
Код будет выглядеть примерно так (как именно - это как раз и является вопросом)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <windows.h>
class __declspec(dllexport) CMyDllObject{
public:
 CMyDllObject(void);
 void Say(LPSTR msg) ;
};
int main(int argc, char* argv[])
{
 HMODULE hDll ;
 
 hDll = LoadLibrary("MyDll.dll") ;
 if(hDll) {
  typedef CMyDllObject* (* F_CREATE)() ;
  F_CREATE CreateMyObject = 0 ;
  CreateMyObject = (F_CEATE)GetProcAddress(hDll, "CreateMyObject") ;
  if(CreateMyObject) {
      CMyDllObject * pObj = 0 ;
      pObj = CreateMyObject();
      if(pObj)  pObj->Say("Hello");
  }
  FreeLibrary(hDll);
 }
 return 0;
}
Приведенный здесь код не работает. В основном проекте у класса нет имплементации.
Мне не хотелось бы создавать ActiveX или COM библиотеку, так как их надо регестрировать в системе, а мне надо подгружать недостающии библиотеки с другого компьютера во время выполнения и удалять ненужные. Кроме того я не использую в проекте MFC, только Win API.
Подскажите, пожалуйста, как мне решить поставленную задачу?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru