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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Програмное включение и выключение монитора http://www.cyberforum.ru/cpp-beginners/thread505767.html
Как можно програмно включить/выключить монитор через windows? Как я понял, это делается с помощью сигналов верт./гориз. синхронизации. Я нашел следующую таблицу <TABLE cellSpacing=1 width=768 border=1><TBODY><TR><TD vAlign=center width="13% <P align=center><B>Horiz</B></P></TD><TD vAlign=center width="13% <B><P align=center>Vert</B></P></TD><TD vAlign=center width="75% <B>...
C++ Алгоритм Цезаря Здраствуйте, я очень надеюсь что вы мне поможете! Мне нужно написать алгоритм шифрования и дешифрования Цезаря Алгоритм такой: Берем i-ый символ и заменяем его на i+{шаг}, где шаг постоянная величина например число 3. Буквы, выходящие за пределы алфавита, возвращаются к началу. Так, при сдвиге 3 букве z исходного текста соответствует буква с зашифрованного текста и т. д. http://www.cyberforum.ru/cpp-beginners/thread505685.html
C++ Компонент для просмотра файлов и папок
Здравствуйте уважаемые участники форума! Мне необходим компонент для просмотра файлов и папок типа OpenDialog или SaveDialog. Компонент должен размещаться на форме (не как диалоговое окно). Какой компоненет мне необходимо для этого использовать? Компоненты вкладки Win 3.1 мне нее подходят, ои выглядят не очень привлекательно. Компонент ShellListView более подходящий, но имеет два недостатка:...
Класс в отдельный файл 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, DWORD dwRop ); ... dwRop подробнее

Показать сообщение отдельно
kpoxa
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
06.10.2006, 21:45     Определение класса в DLL - ипользование вне и динамически
Однажды я уже задавал подобный ворос, ответа так и не получил. В свое время я обошелся без использования классов из 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.
Подскажите, пожалуйста, как мне решить поставленную задачу?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru