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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nightmare0
0 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 4
#1

Начальное изучение явного подключения библиотек и использования их функций - C++

19.06.2012, 21:29. Просмотров 732. Ответов 3
Метки нет (Все метки)

Вот код приложения, которое подключает в себя библиотеку plugin1.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
#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");
 
}
Код библиотеки
C++
1
2
3
4
5
6
7
8
#include <Windows.h>
#include <iostream>
 
 
extern "C" __declspec(dllexport) void MyFunction(void)
{
    std::cout << "Hi from DLL!" << std::endl;
}
Все работает прекрасно, вопрос будет в расширении функционала.

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

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

p.s. Допустим в модуле будет функция инициализации которая будет всегда исполняться при подключении, каким методом можно из библиотеки к примеру передать объект/массив, в общем набор внутренних функций, в основную программу? Массив ссылок на функции и т.д.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2012, 21:29     Начальное изучение явного подключения библиотек и использования их функций
Посмотрите здесь:

C++ вывод текста без использования библиотек?
Функция itoa10, без использования библиотек, sprintf и шаблонов C++
C++ Реально ли написать программы С++ без использования библиотек ?
БЕЗ использования библиотечных функций C++
Открыть exe на другой машине, без использования специальных библиотек C++
C++ Использование string в многофайловом приложении. Необходимость подключения библиотек и пространства имён
Очередь на основе динамического массива. Изучение функций ввода/вывода в программном интерфейсе Win32 C++
По поводу библиотек и их подключения C++
Создание .ехе файла, работающего без подключения библиотек на других компьютерах C++
C++ Вытаскивание функций из библиотек C++
C++ Извлечение подстроки из строки (без использования библиотек функции)
Написать аналог шаблонной функции без использования стандартной (и других библиотек) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jtalk
93 / 79 / 4
Регистрация: 13.05.2011
Сообщений: 279
19.06.2012, 23:00     Начальное изучение явного подключения библиотек и использования их функций #2
Технически, наверное, можно рассчитать абсолютные смещения функций в памяти, передать их через какой-нибудь IPC-канал и восстановить адреса в приложении. Имена тоже можно передать (по крайней мере в C/C++), используя встроенную в препроцессор возможность добывать имена параметров макросов. Но сделать статическую import library гораздо проще — она будет содержать таблицу этих самых функций и позволит вызывать их без ручной добычи адресов.

Больше об import libraries расскажет гугл.
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,113
19.06.2012, 23:11     Начальное изучение явного подключения библиотек и использования их функций #3
А зачем вам функции, если вы даже не знаете их имён? Вот спросит у нас клиент такую-то функцию из такого-то модуля, вы ему и подгрузите, благо библиотека уже связана. Или отдельно к каждому модулю прикладывайте списки импорта(выдирать из бинарника — грязный и корявый метод).
Avazart
7066 / 5243 / 263
Регистрация: 10.12.2010
Сообщений: 23,070
Записей в блоге: 17
19.06.2012, 23:20     Начальное изучение явного подключения библиотек и использования их функций #4
p.s. Допустим в модуле будет функция инициализации которая будет всегда исполняться при подключении, каким методом можно из библиотеки к примеру передать объект/массив, в общем набор внутренних функций, в основную программу? Массив ссылок на функции и т.д.
На каком компиляторе пишите и для каких компиляторов пишите dll ?

Во первых для dll пишиться .h файл куда помещаются все объявления ф-ций.
Во вторых в проектах легче использовать статическое связывание нежеле динамическое поэтому генеряться еще lib файлы которые для разных сред программирования могут отличаться... ( http://www.cyberforum.ru/blogs/131347/blog478.html )

Вот пример для Builder-a Dynamic-Link Library: Теория + Практика
Yandex
Объявления
19.06.2012, 23:20     Начальное изучение явного подключения библиотек и использования их функций
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru