Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ XML ошибка формата https://www.cyberforum.ru/ cpp/ thread123873.html
не знаю куда еще написать, браузер при открытии xml пишет XML Parsing Error: not well-formed Location:...
Правильное чтение из файла! C++
Помогите пожалуйста, уже опробовал все((( Суть задачи такая, есть файл data.txt в нем есть числа выглядит он так: 200,100,100, 100, 300 Ниже представлен код программы, которая просит ввести...
C++ Функции! Приношу свои извинения за этот глупый вопрос, я начинающий программист и сейчас прохожу урок Функции, но не могу понять, очень не понятно описывается, подскажите что такое функции и для чего они... https://www.cyberforum.ru/ cpp/ thread123596.html C++ Любопытственная ошибка В программе глобально объявлен буфер для передачи сообщений по каналу: char MsgBuf; Далее при формировани сообщения: MsgBuf="go"; Следующая ошибка: error C2440: '=' : cannot convert from... https://www.cyberforum.ru/ cpp/ thread123262.html
C++ Перевод из Паскаля в СИ.
Доброго времени суток. Помогите перевести программу из паскаля в СИ. 1 программа: Program oblast; uses crt; var a,b,z:real; c:boolean; begin clrscr; write('Введите a='); readln(a);
C++ Динамические потоки c обрабатываемой памятью https://www.cyberforum.ru/ cpp/ thread123061.html
Нужна ваша помощь. #include "WinThread.h" LPVOID hf1,hf2,hf3; iXml* Tr; AnsiString str; std::vector<GraphObj *> *GNO; typedef struct Params
C++ из паскаля в си_1 program kontrolnaya; uses crt; var a,b,z,r:real; begin clrscr; write('a=');readln(a); write('b=');readln(b); write('r=');readln(r); if (((a-5)*(a-5)+b*b<r*r) and not((a+5)*(a+5)+b*b<r*r)) or... https://www.cyberforum.ru/ cpp/ thread123000.html из паскаля в си_2 C++
пожалуйста, помогите переписать на с++(((((((((((((( program kontr; uses crt; const nmax=100; type mas=array of integer; procedure Vvod(var v:mas;var x:byte); var i:byte; begin
C++ В каком SDK находятся библиотечные файлы Urlmon.lib winmm.lib https://www.cyberforum.ru/ cpp/ thread122899.html
В каком SDK находятся библиотечные файлы Urlmon.lib winmm.lib? Я предполагал что в Direct SDK(у меня DirectX SDK 2006), однако там не нашел. Может кто подскажет где находятся и какую...
C++ Транслятор с паскаля на С https://www.cyberforum.ru/ cpp/ thread122831.html
Салют! Можете привести самый простой пример транслятора с паскаля на С, заранее спасибо
C++ Програмирование С (без (++))
Помогите с решением и если это важно работаем с программой Borland ++++++++++++++++++++++ 1. Дайте определение строки. Чем строка отличается от символьного массива? Приведите пример. 2. Какие...
C++ Сгенирировать тест на stamina https://www.cyberforum.ru/ cpp/ thread122001.html
Дело в том, что мне надо давать слепой набор, для этого хотчу сгенерировать последовательность слов, впихнуть их в stamina и тренироваться. Вот только самому их прибумывать не охота, да и я хочу...
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.03.2011, 13:46  [ТС] 0

Теория плагинов - C++ - Ответ 1442728

12.03.2011, 13:46. Показов 29800. Ответов 40
Метки (Все метки)

Ответ

есть базовый тип для плагинов:
C++
1
2
3
4
5
struct plugin_object {
   virtual const char* name() const = 0;
   virtual const char* description() const { return "null"; }
   virtual const char* version() const { return "null"; }
};
далее я наследуюсь от него и реализую собственный тип.
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct type1: plugin_object {
   type1();
   virtual const char* name() const;
   virtual const char* description() const;
   virtual const char* version() const;
   
   void set(int);
   int get() const;
   
private:
   int val;
};
реализация в .cpp фале. ее приводить не буду. ничего интересного в ней нет.

собираю плагин так:
> g++ -fPIC -c test.cpp
> g++ -shared test.o -o test.so
тестовое приложение выглядит так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(int argc, char** argv) {
   plugin_loader plugin("test.so");
   plugin_object* obj = plugin.instance();
 
   std::cout
   << "name: " << obj->name() << std::endl
   << "description: " << obj->description() << std::endl
   << "version: " << obj->version() << std::endl;
 
   type1* t1 = static_cast<type1*>(obj);
   int v = t1->get();
   std::cout << "v = " << v << std::endl;
   t1->set(33);
   v = t1->get();
   std::cout << "v = " << v << std::endl;
}
при линковке получаю это:
undefined reference to `type1::get() const'
undefined reference to `type1::set(int)'
undefined reference to `type1::get() const'
оно и понятно, еще несколько моментов необходимо знать:
1) методы реализаций должны быть виртуальными.
т.е. в наши методы get() и set() нужно добавить спецификатор virtual.

2) в хидере, не пишите реализацию, т.к. в таком случае, компилятор будет использовать ее, и получится каша
пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct type1: plugin_object {
   type1();
   virtual const char* name() const;
   virtual const char* description() const;
   virtual const char* version() const;
   
   virtual void set(int);
   virtual int get() const { return 44; }
   
private:
   int val;
};
при вызове метода get() из тестового приложения, вы вне зависимости от реализации в .so файле, получите как результат 44

Вернуться к обсуждению:
Теория плагинов C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2011, 13:46
Готовые ответы и решения:

Написание плагинов для notepad++
Добрый день! Есть задача написания плагина для notepad++ - немного модифицировать его графический...

Система плагинов
Добрый день форумчане. У меня к вам есть вопрос. Кратко. Как можно реализовать систему плагинов?...

Взаимодействие плагинов
Приветствую, товарищи. Возникла такая необходимость. Намерен сделать два плагина. Конкретнее, два...

Подключение плагинов к программе
Появилась необходимость в разработке текстового редактора с возможностью подключения своих...

40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2011, 13:46
Помогаю со студенческими работами здесь

Как видео с камеры отобразить в браузере без использования сторонних плагинов?
Есть простенький веб сервер. на компьютере, на котором развернут сервер, есть встроенная камера....

Реализовать систему плагинов (модулей), каждый из которых должен работать в отдельном потоке
Всем доброго времени суток, не могли бы вы мне помочь реализовать систему плагинов( модулей)....

Взаимодействие плагинов с ядром
Разбираю теорию плагинов. Как выполнить какую либо функцию из .so, это понятно и просто, а вот как...

Установка плагинов cppunit + ecut в Eclipse
Всем доброго времени суток, не могу установить плагины для Eclipse - cppunit + ecut, нужны для юнит...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru