Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2012, 15:09   #1
Nightmare0
Новичок
Джуниор
 
Регистрация: 19.06.2012
Сообщений: 4
Злость Теоретическая часть. По сопутствуйте, буду рад :)

Здравствуйте. Решил написать программу, идея программы заключается в том чтобы на базе консольного приложения написать программу(функции ввода вывода, изменения цвета, скроллинг видимого буфера консоли). Программа будет пользователем получать команды, и исполнять функции, но этот функционал должен подключаться в виде библиотек dll. Для библиотек будет выделена соответствующая папка в директории с программой, программа заранее не знает о наличии библиотек в папке, подключение библиотеки будет вызываться командой #connect ИМЯ_БИБЛИОТЕКИ. Библиотека должна включать в себя поля, такие как слова автора ( к примеру команда about()), список функций в виде текста, описания функций (названия и аргументы) и сам функционал.

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

К примеру в библиотеке test1.dll есть функция возведения в квадрат qF(int i); Из консольного приложения я подключаю эту библиотеку (#connect test1) а так же с помощью интерфейса(ввод с клавиатуры) вызываю из библиотеки функцию qF c аргументом 5 вида "/qF 5" которая выводит на экран число 25. Библиотека должна иметь доступ к интерфейсу консоли (команды вывода и применения цвета).

Пишу приложение на С++. Реализации выше написанному не представляю.

Ранее по этому вопросу мне подсказали что-то насчет движка для плагинов или что-то в этом роде.

Прошу направить мой интерес в нужное русло.
Nightmare0 вне форума Ответить с цитированием
Старый 19.06.2012, 16:33   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Что-то очень напоминает вирусы и ботнеты...
p51x вне форума Ответить с цитированием
Старый 19.06.2012, 21:36   #3
Nightmare0
Новичок
Джуниор
 
Регистрация: 19.06.2012
Сообщений: 4
По умолчанию

Чем то вы и правы, но все же ваш ответ не по теме.
За то время которое прошло после создания этой темы я нашел то что мне нужно.

Код основной программы

Код:
#include <Windows.h>
#include <iostream>
using namespace std;

typedef void (__stdcall *MYPROC)(void);

void main(void) {
	cout << "Load Dll..." << endl;
 
    HMODULE hLib = LoadLibrary(L"plugin1.dll"); // Загружаем библиотеку
    if (hLib)
    {
        cout << "Library load." << endl;
 
        MYPROC MyFunction = (MYPROC)GetProcAddress(hLib, "MyFunction"); 
        if (MyFunction) 
        {
            cout << "Function load." << endl;
 
            MyFunction();
        }
    }
 
    system("pause");

}
Код библиотеки

Код:
#include <Windows.h>
#include <iostream>


extern "C" __declspec(dllexport) void MyFunction(void)
{
    std::cout << "Hi from DLL!" << std::endl;
}
Все работает прекрасно, вопрос будет в расширении функционала.

В строке
Код:
MYPROC MyFunction = (MYPROC)GetProcAddress(hLib, "MyFunction");
мы получаем функцию "MyFunction" из явно подключаемой библиотеки.
Проблема в том что я не знаю какие функции будут в модуле, но знаю список функций в виде текста, следовательно я не могу использовать
Код:
MyFunction();
в основной программе. Можно ли как-то эту строку изменять в зависимости от поступаемого аргумента в строке
Код:
MYPROC MyFunction = (MYPROC)GetProcAddress(hLib, "MyFunction");
"MyFunction" ?

Буду рад любой информации касательно темы!

p.s. Допустим в модуле будет функция инициализации которая будет всегда исполняться при подключении, каким методом можно из библиотеки к примеру передать объект/массив, в общем набор внутренних функций, в основную программу? Массив ссылок на функции и т.д.
Nightmare0 вне форума Ответить с цитированием
Старый 20.06.2012, 09:37   #4
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Основная программа должна будет знать типы функций. С++ строго типизированный язык. Если тип один, то можно передать массив строк с названиями.
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 20.06.2012 в 09:40.
Krok27 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто поможет найти ошибку в программе буду рад Progsenya Общие вопросы C/C++ 4 09.07.2010 00:28
iTAP (T9). Буду рад советам и помощи. [Witold] Компоненты Delphi 2 03.01.2010 16:46
Паскаль Задачи. примерно 10 буду рад если решите... желательно с блок схемами. Буду сильно благодарен. Азарт Помощь студентам 8 26.03.2009 23:51