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

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

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

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

19.06.2012, 21:29. Просмотров 799. Ответов 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. Допустим в модуле будет функция инициализации которая будет всегда исполняться при подключении, каким методом можно из библиотеки к примеру передать объект/массив, в общем набор внутренних функций, в основную программу? Массив ссылок на функции и т.д.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2012, 21:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Начальное изучение явного подключения библиотек и использования их функций (C++):

Изучение библиотек и функций - C++
Доброго времени. Друзья, скажите, как вообще изучать функции, библиотеки? Каким образом узнать какая библиотека необходима для решения...

По поводу библиотек и их подключения - C++
Добрый день, нужна помощь в подключении библиотеки. Я пишу свою библиотечку, получаю 2 файла mylib.cpp и mylib.h , если кидать в папку...

вывод текста без использования библиотек? - C++
в общем вот такая вот задачка на Turbo C написать такую дрянь надо , блин говорят всего то строчки 3-4 ....вообще без использования любых...

Реально ли написать программы С++ без использования библиотек ? - C++
1)Реально ли писать программы С++ без использования библиотек ? 2)оно того стоит ?

Извлечение подстроки из строки (без использования библиотек функции) - C++
Извлечение подстроки из строки (без использования библиотек функций). Помогите чем кто может, заранее спасибо:)

Функция itoa10, без использования библиотек, sprintf и шаблонов - C++
Нужно реализовать функцию itoa (желательно itoa10) Проще говоря нужно переводить число в строку, (желательно только по основанию 10)...

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

Больше об import libraries расскажет гугл.
0
NoMasters
Псевдослучайный
1754 / 1097 / 72
Регистрация: 13.09.2011
Сообщений: 3,134
19.06.2012, 23:11 #3
А зачем вам функции, если вы даже не знаете их имён? Вот спросит у нас клиент такую-то функцию из такого-то модуля, вы ему и подгрузите, благо библиотека уже связана. Или отдельно к каждому модулю прикладывайте списки импорта(выдирать из бинарника — грязный и корявый метод).
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,665
Записей в блоге: 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: Теория + Практика
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 23:20
Привет! Вот еще темы с ответами:

Открыть exe на другой машине, без использования специальных библиотек - C++
Скажите пожалуйста, какие свойства проекта надо изменить в Visual Studio, чтобы exeшник открывался на другой машине, без использования...

Использование string в многофайловом приложении. Необходимость подключения библиотек и пространства имён - C++
Здравствуйте. Есть заголовочный и cpp файлы. В заголовочном пишу#ifndef MODEL_H #define MODEL_H struct Vertex { float x, y, z; ...

Создание .ехе файла, работающего без подключения библиотек на других компьютерах - C++
Привет всем. вопрос такой. как в sublime text 3 создать ехе файл(С++(mingw)), который на других компах будеть работать без...

Написать аналог шаблонной функции без использования стандартной (и других библиотек) - C++
Здравствуйте! Набрел на вот такой вопрос по C++. Вот мой вариант ответа: template&lt;class Base, class Derived&gt; bool...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.06.2012, 23:20
Ответ Создать тему
Опции темы

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