Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 18.07.2010
Сообщений: 7

Импорт dll

27.07.2010, 19:35. Показов 5631. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здрасте)
Суть вопроса такова:
Мне надо импортировать в создаваемую dll динамические библиотеки из другой программы, чтобы можно было в своей dll использовать их функции.
Если не трудно, хотелось бы на простом примере увидеть как это сделать, в файлах .h и .cpp.
Например, импортировать s.dll и функцию ААА и b.dll. и функцию BBB.
Заранее спасибо, просто я нуб в этом и никак не получается.
Использую VS 10.
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.07.2010, 19:35
Ответы с готовыми решениями:

Импорт DLL библиотеки
как подключить к проекту DLL библиотеку и использивать функции в ней?

Импорт DLL из Delphi в Visual C++
Всем доброго времени суток! У меня появилась необходимость импортировать в проект библиотеку собранную в делфи. Есть DLL файл и больше...

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual Studio 2013. При компиляции выдает ошибку...

6
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
27.07.2010, 20:28
Пример для функции rtcSin из msvbvm60.dll.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <windows.h>
#include <stdio.h>
 
int main()
{
    HMODULE hModule;
    double (*rtcSin)(double);
    double result;
    
    printf("rtcSin Example\n\n");
 
    hModule=LoadLibrary("msvbvm60.dll");
    rtcSin=(double (*)(double))GetProcAddress(hModule,"rtcSin");
 
    result=(*rtcSin)(1.57);
    printf("Sin(pi/2)=%lf\n", result);
 
    return 0;
}
Добавлено через 14 минут
Второй вариант.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <windows.h>
#include <stdio.h>
 
typedef double (*rtcdouble)(double);
 
int main()
{
    HMODULE hModule;
    rtcdouble rtcSin;
    double result;
    
    printf("rtcSin Example\n\n");
 
    hModule=LoadLibrary("msvbvm60.dll");
    rtcSin=(rtcdouble)GetProcAddress(hModule,"rtcSin");
 
    result=rtcSin(1.57);
    printf("Sin(pi/2)=%lf\n", result);
 
    return 0;
}
Про указатели на функцию читаем здесь: http://www.cyberguru.ru/progra... age67.html
1
1 / 1 / 0
Регистрация: 18.07.2010
Сообщений: 7
27.07.2010, 20:39  [ТС]
Спасибо, я попробую, но дело в том, что мне надо добавить не стандартную библиотеку винды с ее функцией, а библиотеку приложения.
И желательно применяя __declspec(dllimport), поскольку я только учусь и именно эти ключевые слова используются в VS 10 по умолчанию при создании проекта с помощью конструктора)
Но все равно, спасибо)
0
4 / 0 / 0
Регистрация: 25.12.2019
Сообщений: 60
25.11.2020, 00:01
Хочу дополнить. Возможно, потребуется использовать LoadLibraryA вместо LoadLibrary.

И пример импорта для функции с двумя переменными.

C++
1
2
3
4
5
6
7
8
// Dll Export
 
#include "stdafx.h"
 
extern "C" __declspec(dllexport) double Add( double left, double right )
{
    return left + right;
}
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
// Dll Import
 
#include <windows.h> // for HMODULE
#include <iostream> // for cout
#include <conio.h> // for _getch()
 
using namespace std; // for cout
 
typedef double (*rtcdouble)(double, double);
 
int _tmain()
{
    HMODULE hModule;
    rtcdouble rtcAdd;
    
    printf("rtcAdd Example\n\n");
 
    hModule=LoadLibraryA("test_DLL.dll");
    rtcAdd=(rtcdouble)GetProcAddress(hModule,"Add");
 
    cout << "A + B = " << rtcAdd(1.2, 2.3) << endl;
 
    _getch(); // pause
 
    return 0;
}
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
30.11.2020, 12:52

Не по теме:

Цитата Сообщение от Lex248 Посмотреть сообщение
Хочу дополнить.
спустя 10 лет..



Цитата Сообщение от Lex248 Посмотреть сообщение
Возможно, потребуется использовать LoadLibraryA вместо LoadLibrary.
и в чём по вашему разница между LoadLibraryA и LoadLibrary?
вы в курсе, что LoadLibrary это определение, значение которого выбирается от выбранной в проекте кодировки?

чтобы не парится и именем функции в MS придумали макрос TEXT("").
0
4 / 0 / 0
Регистрация: 25.12.2019
Сообщений: 60
30.11.2020, 16:31
_lunar_, главное, что препроцессор в курсе.

Здесь подробно описано:
https://stackoverflow.com/ques... -a-lpctstr
0
19 / 14 / 4
Регистрация: 10.07.2018
Сообщений: 321
09.07.2023, 22:38
C++
1
2
3
4
5
6
7
8
9
10
#pragma once
 
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
 
extern "C" MYDLL_API void AAA();
extern "C" MYDLL_API void BBB();

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
#include "mydll.h"
#include <iostream>
#include <Windows.h>
 
typedef void(*AAA_func)();
typedef void(*BBB_func)();
 
void AAA() {
    HMODULE sDll = LoadLibraryA("s.dll");
    if (sDll != NULL) {
        AAA_func AAA_fun = (AAA_func)GetProcAddress(sDll, "AAA");
        if (AAA_fun != NULL) {
            AAA_fun();
            FreeLibrary(sDll);
        }
    }
}
 
void BBB() {
    HMODULE bDll = LoadLibraryA("b.dll");
    if (bDll != NULL) {
        BBB_func BBB_fun = (BBB_func)GetProcAddress(bDll, "BBB");
        if (BBB_fun != NULL) {
            BBB_fun();
            FreeLibrary(bDll);
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.07.2023, 22:38
Помогаю со студенческими работами здесь

Использование функций DLL из другой DLL
Ребята подскажите имеется hscli.DLL hscli.LIB и hscli.H , собираю свою DLL-ку , которая использует функции hscli.DLL мои...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

Порядковый номер 354 не найден в библиотеке DLL LIBEAY32.DLL
Всем привет, вылезает ошибка при компиляции приложения &quot;Порядковый номер 354 не найден в библиотеке DLL LIBEAY32.DLL&quot;. Работаю со...

Windows I/o без Kernel32.dll и Advapi32.dll
Добрый день. Необходимо в Windows XP SP3 распечатать в стандартный поток &quot;some text here&quot; без прямого или косвенного использования...

При компиляции DLL-проекта не создается DLL-ка
Добрый день. создал в Visual Studio 2010 проект C+= типа DLL. В файл dllmain.cpp вставил вот такой код: // test.cpp: определяет...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru