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

Как экспортировать интерфейс из dll - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Настройка debugger'a в codeblocks http://www.cyberforum.ru/cpp-beginners/thread1237682.html
Когда я ставлю брекпоинт и нажимаю на кнопку "debug" компилятор не останавливается на брекпоинте, а просто выполняет программу. Подскажите, что не так?
C++ Перегрузка оператора + не получается в своем классе перегрузить оператор + :( пишет "error C2804: бинарный "operator +" имеет слишком много параметров", действительно задал 2 параметра, но как еще то? ведь + и подразумевает собой сложение 2х значений... http://www.cyberforum.ru/cpp-beginners/thread1237651.html
C++ Как грамотно подключать заголовочные файлы?
Как грамотно подключать заголовочные файлы? Можно ли их все собрать в stdafx.h а потом инклюдить там где они мне нужны? А то сейчас получается, в одном .h объявил переменную с типом класса который описан в другом .h и посыпались ошибки.
C++ Алгоритм добавления элемента в сортированный список
Нужно придумать алгоритм для добавления элемента в сортированный список(STL list<char>), то есть этот алгоритм должен сравнивать введенный элемент с уже имеющимися элементами в списке и встать в нужное место. Я думал организовать алгоритм с помощью бинарного поиска, но возникает вопрос, как определить итератор на центр списка.
C++ Получение данных из файла http://www.cyberforum.ru/cpp-beginners/thread1237639.html
Задача№6. Постройте программу, которая отслеживает пожертвования в Общество Защиты Влиятельных Лиц. Она должна запрашивать у пользователя количество меценатов, а затем приглашать вводить их имена и суммы пожертвований от каждого. Информация должна сохраняться в динамически выделяемом массиве структур. Каждая структура должна иметь два члена: символьный массив (или объект string) для хранения...
C++ Обход графа в ширину - Breadth First Search (BFS) Всем привет! Я не понимаю алгоритм обхода в глубину BFS:( Кто может помощь? подробнее

Показать сообщение отдельно
Dobbermann
0 / 0 / 0
Регистрация: 30.07.2014
Сообщений: 5
02.08.2014, 19:19     Как экспортировать интерфейс из dll
делал всё по примеру в инете, не работает

код интерфейса
C++
1
2
3
4
5
6
struct I_MyInterface
{
   virtual bool  Init(int parms)=0;
   virtual bool  Release()=0;
   virtual void  DoStuff() =0;
};
код 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
39
40
41
42
43
44
45
46
47
48
49
extern "C"
{
HRESULT  GetMyInterface(I_MyInterface ** pInterface);
typedef HRESULT (*GETINTERFACE)(I_MyInterface  ** pInterface);
 
HRESULT  FreeMyInterface(I_MyInterface ** pInterface);
typedef HRESULT (*FREEINTERFACE)(I_MyInterface ** pInterface);
}
 
 
//============================================================
//Реализация интерфейса в Dll
// MyInterface.h
 
class CMyClass: public I_MyInterface
{
public:
   bool  Init(int parms);
   bool  Release();
   void  DoStuff();
 
   CMyClass();
   ~CMyClass();
 
   //любые другие члены класса
   ............
private:
   //любые члены класса
   ............
};
 
HRESULT GetMyInterface(I_MyInterface ** pInterface)
{
   if(!*pInterface)
   {
      *pInterface= new CMyClass;
      return S_OK;
   }
   return E_FAIL;
}
 
HRESULT FreeMyInterface(I_MyInterface ** pInterface)
{
   if(!*pInterface)
      return E_FAIL;
   delete *pInterface;
   *pInterface= 0;
   return S_OK;
}
клиент
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
39
40
41
42
43
44
45
int main(){
 
GETINTERFACE pfnInterface=0;//указатель на функцию GetMyInterface
I_MyInterface * pInterface  =0;//указатель на структуру MyInterface
 
HINSTANCE hMyDll = ::LoadLibrary("myinterface.dll");
 
if(hMyDll != NULL)
{
   //Определяем адрес функции
   pfnInterface= (GETINTERFACE)::GetProcAddress(hMyDll,
          "GetMyInterface");
 
   //Выгружаем DLL, если предыдущая операция окончилась неудачей
   if(pfnInterface == 0)   
   {
      ::FreeLibrary(hMyDll);
      return;
   }
 
   //Вызываем функцию
   HRESULT hr = pfnInterface(&pInterface);
   
   //Выгружаем, если неудачно
   if(FAILED(hr))   
   {   
      ::FreeLibrary(hMyDll);
      return;
   }
 
   //Интерфейс загружен, можно вызывать функции
   pInterface->Init(1);
   pInterface->DoStuff();
   pInterface->Release();
 
   //Освобождаем интерфейс
 
   FREEINTERFACE pfnFree = 
       (FREEINTERFACE )::GetProcAddress(hMyDll,"FreeMyInterface");
   if(pfnFree != 0)
      pfnFree(&hMyDll);
 
   //Выгружаем DLL
   ::FreeLibrary(hMyDll);
}}
пожалуйста покажите как это делать правильно, желательно примерчик, чтобы можно было собрать и посмотреть. очень-очень нужно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru