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

Написать класс С++, который использует функции из библиотеки с - C++

Восстановить пароль Регистрация
 
Freq1
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 48
25.05.2013, 16:32     Написать класс С++, который использует функции из библиотеки с #1
Есть С длл как написать класс С++, который использует функции из библиотеки с?

Добавлено через 37 минут
это нужно писать обертку?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2013, 16:32     Написать класс С++, который использует функции из библиотеки с
Посмотрите здесь:

C++ Написать класс Binary, который инкрементирует число, записанное в 2-чном виде
нужно написать драйвер, который имеет две функции: startmyfunc() и stopmyfunc() C++
C++ Написать класс, который создает и выводит массив
Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) C++
написать такой класс, который представляет собой двоичное число C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pizurok
 Аватар для pizurok
53 / 67 / 3
Регистрация: 05.05.2013
Сообщений: 2,703
25.05.2013, 16:36     Написать класс С++, который использует функции из библиотеки с #2
Цитата Сообщение от Freq1 Посмотреть сообщение
Есть С длл как написать класс С++, который использует функции из библиотеки с?
Пусть, например, в либе ,mylib.dll есть функция f1, которая имеет следующий заголовок:

C++
1
2
3
4
extern "C" _declspec(dllexport) int f1(float p1, double p2)
{
    ...
}
обязательно её сделать экспортируемой через _declspec(dllexport) и добавить extern "C", чтобы линкер не испортил имя

Тогда код модуля, загружающего библиотеку выглядит так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <windows.h>
 
typedef int (*ptrFunc)(float, double);   //объявляется тип ptrFunc - указатель на функцию
int main()
{
HINSTANCE lib = LoadLibrary("mylib.dll");    //загружаем библиотеку
if (!lib)
{
   MessageBox(NULL,"mylib.dll not found", "error", 0);
   return GetLastError();
}
 
ptrFunc p = (ptrFunc) GetProcAddress(lib, "f1");   //получаем адрес функции в указатель p
if(!p) 
{
   MessageBox(NULL,"function f1 not found", "error", 0);
   return GetLastError();
}
 
int x = (*p) (5, 7.8);    //вызов функции через указатель
FreeLibrary(lib);           //выгрузка библиотеки
return 0;
}
Freq1
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 48
25.05.2013, 16:53  [ТС]     Написать класс С++, который использует функции из библиотеки с #3
pizurok, а если в либе у меня используеться свой struct?
pizurok
 Аватар для pizurok
53 / 67 / 3
Регистрация: 05.05.2013
Сообщений: 2,703
25.05.2013, 17:00     Написать класс С++, который использует функции из библиотеки с #4
Цитата Сообщение от Freq1 Посмотреть сообщение
pizurok, а если в либе у меня используеться свой struct?
Вы хотите экспортировать тип? Или как? Можно поподробнее суть проблемы. Желательно код самой функции
Freq1
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 48
25.05.2013, 17:04  [ТС]     Написать класс С++, который использует функции из библиотеки с #5
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
typedef int l_int;
struct long_num
{
    int len;
    char sign;
    l_int num[];
};
typedef struct long_num Llong;
typedef Llong * Plong;
 
int _len (Plong a, int st)
{
   int i = st, maxl = MaxSize;
   while (a -> num[i] == 0 && i > 0) i--;
       return i+1;
}
 
void add_abs (Plong a, Plong b, Plong res)
{
    int k, maxl = MaxSize;
    if (a->len > b->len)
        k = a -> len - 1;
    else
        k = b -> len - 1;
    maxl--;
    int s = 0, p = 0, j = k;
    while (j >= 0)
    {
        s = a -> num[j] + b -> num[j] + p;
        res -> num[j] = s % _Base;
        p = s / _Base;
        j--;
    }
    res -> len = _len(res, k + 2);
}
это тип и функция из длл.
Я хочу использовать их в с++ проекте
pizurok
 Аватар для pizurok
53 / 67 / 3
Регистрация: 05.05.2013
Сообщений: 2,703
25.05.2013, 17:09     Написать класс С++, который использует функции из библиотеки с #6
Вы в любом случае будете в основной программе создавать переменные типа long_num. Создать переменную неизвестного типа нельзя, компилятор откажется, поэтому в любом случае должен быть хеадер (*.h), который содержит объявление этого типа. Далее реализацию логики сложения и преобразования можно реализовывать в dll
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2013, 17:36     Написать класс С++, который использует функции из библиотеки с
Еще ссылки по теме:

Написать класс, который эмулирует работу типа float. Реализовать метод А^В C++
C++ Создать класс student, который использует файл student.txt
Написать класс, который бы инкапсулировал массив окружности C++

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

Или воспользуйтесь поиском по форуму:
Убежденный
Системный программист
 Аватар для Убежденный
14191 / 6206 / 985
Регистрация: 02.05.2013
Сообщений: 10,339
Завершенные тесты: 1
25.05.2013, 17:36     Написать класс С++, который использует функции из библиотеки с #7
Freq1, Вам нужно создать общий для обоих проектов заголовок и
поместить в него все совместно используемые объявления. В данном случае
это будут long_num, все typedef-ы из кода выше и, конечно, объявление
функции add_abs (и _len, если нужно).

dll-функции нужно объявлять со спецификатором __declspec(dllexport) для dll, из
которой они экспортируются, и __declspec(dllimport) для клиентского кода.
Сделать это в одном заголовке можно с помощью макросов.

При сборке dll будет также собрана библиотека импорта (.lib-файл), ее нужно
будет подключить к сборке клиента - так компоновщик будет знать, где
находится тело функции и не станет ругаться на отсутствующие определения.

dll должна собираться до клиента.

Если в dll выделяется память, которая должна освобождаться на клиенте,
или наоборот, тогда на такую систему налагается дополнительное требование -
и клиент, и dll обязаны использовать общий аллокатор памяти.
В Visual C++ это обеспечивается использованием динамического рантайма
(флаги /MD или /MDd компилятора, раздел C++ / Code Generation).

Вот, пожалуй, и все.
Спрашивайте, если что-то непонятно, в двух словах экспорт из dll не описать,
тут еще вопросы calling convention (соглашения о вызовах) и name mangling
(искажение имен) остались за кадром.
Yandex
Объявления
25.05.2013, 17:36     Написать класс С++, который использует функции из библиотеки с
Ответ Создать тему
Опции темы

Текущее время: 05:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru