Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320

Народ подскажите, чета я забыл DLL как экспортировать

02.08.2012, 13:45. Показов 999. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот например есть в DLL код функции:

C++
1
2
3
4
5
6
void OpenAbout(HINSTANCE hInst, int cmdMode, HWND hWnds)
{
....
 
return;
}
а из основной программы как вызвать. dll уже готова функция экспортировал так:

C++
1
extern "C" __declspec(dllexport) void OpenAbout(HINSTANCE, int, HWND);
Добавлено через 2 минуты
я ее так вот пытался но не получилось!

C++
1
void OpenAbout(void (*) (HINSTANCE, int, HWND) ) = GetProcAddress(hModul, L"OpenAbout");
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.08.2012, 13:45
Ответы с готовыми решениями:

Как экспортировать структуру из DLL?
Как експортировать структуру из DLL Добавлено через 1 час 5 минут Что же я в тупике?

Как экспортировать класс из DLL
Проблема в следующем есть класс написанный на С++, который надо поместить в DLL. Во - первых : неясно как этот класс...

Как экспортировать интерфейс из dll
делал всё по примеру в инете, не работает код интерфейса struct I_MyInterface { virtual bool Init(int parms)=0; ...

7
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.08.2012, 14:25
Есть такое для Builder-a, но общий принцип можно посмотреть
Dynamic-Link Library: Теория + Практика
0
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
02.08.2012, 15:11  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Есть такое для Builder-a, но общий принцип можно посмотреть
Dynamic-Link Library: Теория + Практика
не мне не это надо - а обьяснить что означает запись

C++
1
2
3
4
5
6
7
8
9
10
11
                void(*OpenAbout)(HINSTANCE, int, HWND); //<возращаемое значение><имя функции><переменные>
 
 
                //OpenAbout = *OpenAbout;
                OpenAbout = (void(*)(HINSTANCE, int, HWND)) GetProcAddress(hModul, "OpenAbout");
                //void OpenAbout(void (*) (HINSTANCE)) = GetProcAddress(hModul, L"OpenAbout");
                OpenAbout(hInstA, cmdModeA, hwnd);
 
 
                    break;
                }
в плане не понимаю (точнее есть сомнение в правильности понимания) записи
C++
1
//void OpenAbout(void (*) (HINSTANCE)) = GetProcAddress(hModul, L"OpenAbout");
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.08.2012, 15:15
По ссылке которая вам не надо

C++
1
2
3
4
5
6
typedef void __cdecl (*dll_func)(const int A, const int B);
 
//....
 
// пытаемся найти в таблице экспорта необходимую нам функцию
pShowSum = (dll_func)GetProcAddress(hDLL, "_ShowSum"); // обратите название на название функции (объяснение будет ниже)
в плане не понимаю (точнее есть сомнение в правильности понимания) записи
Читайте про указатели на ф-ции
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
02.08.2012, 16:40
n971030, посмотри сюда GetFileType и GetCosoleCursorInfo и сюда
https://www.cyberforum.ru/visu... ost1922643

DLL можно подгружать через LoadLibrary и тогда нужно инициализировать указатели на функции, а можно всё делать через lib файл. В любом случае в твоём коде не хватает этого
C++
1
2
3
4
5
6
7
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
EXPORT void OpenAbout(HINSTANCE hInst, int cmdMode, HWND hWnds);
перед DllMain (иначе DLL слинкуется без этой функции) а также убери return; оно никчему в функции с типом void
1
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
02.08.2012, 16:51  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
n971030, посмотри сюда GetFileType и GetCosoleCursorInfo и сюда
https://www.cyberforum.ru/visu... ost1922643

DLL можно подгружать через LoadLibrary и тогда нужно инициализировать указатели на функции, а можно всё делать через lib файл. В любом случае в твоём коде не хватает этого
C++
1
2
3
4
5
6
7
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
EXPORT void OpenAbout(HINSTANCE hInst, int cmdMode, HWND hWnds);
перед DllMain (иначе DLL слинкуется без этой функции) а также убери return; оно никчему в функции с типом void
Спасибо, я знаю что в коде нет этого, но я привел маленький пример с которым столкнулся, и сомнительно понимаю последовательность записи. Там очень много скобок, проверьте меня правильно ли понимаю запись:

C++
1
OpenAbout = (void(*)(HINSTANCE, int, HWND)) GetProcAddress(hModul, "OpenAbout");
<имя функции> = (тип возвращаемый функцией(звездочкаговорит что надо указатель вернуть) (перечисление всех типов переменных)) GetProcAddress (,получает адрес функции указаного по имени);
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.08.2012, 17:19
Что бы не путаться в скобках есть typedef
C++
1
2
3
typedef void /*__cdecl */ (*dll_func)(HINSTANCE, int, HWND);
//.... 
OpenAbout = (dll_func)GetProcAddress(hModul, "OpenAbout");
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
02.08.2012, 17:33
Вот так будет норм
C++
1
OpenAbout = (void(__stdcall)(HINSTANCE, int, HWND)) GetProcAddress(hModul, "OpenAbout");
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.08.2012, 17:33
Помогаю со студенческими работами здесь

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

Как импортировать и экспортировать из dll класс?
Помогите, плз. Создал dll: //... class __declspec(dllexport) a { public : a(); }; a::a() {

Как экспортировать функции фреймфорка в DLL
Добрый день! Вот уже через неделю сдаю работу, хотелось бы чтобы клиент не &quot;таскал&quot; за собой &quot;гигантский&quot; фреймворк. ...

Как экспортировать функцию из dll? У меня ошибка выдаётся
Как экспортировать ф-ю из dll? У меня ошибка выдаётся

Народ! А кто знает где взять Help по InfoZip библиотекам UnZip32.dll & Zip32.dll?
Народ! А кто знает где взять Help по InfoZip библиотекам UnZip32.dll &amp; Zip32.dll?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru