Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,570
Записей в блоге: 27

Как сделать обратный вызов функции из dll?

03.10.2025, 16:38. Показов 2441. Ответов 30
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Почитал тему:
CallBack функции. Один из способов реализации
Попробовал реализовать. Не работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 void(*MyCallback);
void LoadFunc(void* lpFunc) {
    MessageBox(0, "OK", "OK", MB_OK);
    MyCallback = (void (*))lpFunc;
}
.............
void _stdcall foo3(unsigned int* y, int lpFunc)     // PROC lpFunc
{
    *y = 72;
 
    char buf1[32];
    snprintf(buf1, sizeof(buf1),"%i\x00", lpFunc);
    MessageBox(0, buf1, "Caption", MB_OK);
 
    
    MyCallback;
}
Передаю в библиотечную функцию 2 параметра: переменную и адрес Callback функции в вызывающей программе. Понимаю, что что-то сделал не так, а как надо сделать правильно, несмотря на долгие поиски в интернете, так и не понял.
Как правильно сделать обратный вызов функции из dll, чтобы она выполнялась в вызывающей программе?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.10.2025, 16:38
Ответы с готовыми решениями:

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

Вызов функции DLL VB.NET в DLL C++
Как вызывать функции dll VB.NET через dll С++, которая приинжекчена к процессу проводника?

Сборка Qt: отучение Qt от mingw10.dll, libgcc_s_dw2-1.dll и других Qt***.dll
В связи с тем, что часто возникают одни и те же вопросы, а в нете копаться никто не любит привожу...

30
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
04.10.2025, 14:55
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Argus19 Посмотреть сообщение
С++ мне нужен для создания библиотек, чтобы убрать в них "лишний" код.
Не люблю, когда от обилия кода рябит в глазах.
Какие загадки.
Что такое "лишний" код?
Что такое "рябит в глазах" от кода?
Код разбивается на функции/классы/модули. И ничего нигде не рябит.
При чем тут, казалось бы, DLL...
Хотя, я же ничего не понимаю в VB, может там что то и рябит.
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,375
04.10.2025, 14:56

За такое мне скока дадут?
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,570
Записей в блоге: 27
04.10.2025, 14:59  [ТС]
Цитата Сообщение от Наталья8 Посмотреть сообщение
За такое мне скока дадут?
Если не ошибаюсь, такое есть в Visual studio.
0
1412 / 876 / 93
Регистрация: 08.02.2017
Сообщений: 3,735
Записей в блоге: 2
04.10.2025, 15:10
Цитата Сообщение от Наталья8 Посмотреть сообщение
Зачем вам бейсик.?.. Пишите уже на си....
Я бы сказал от себя, что на самом Си писать не так уж интересно, поскольку на нем или под него все уже есть и это какбы само собой обычно, а вот когда делаешь что-то под VB или VBA на Си, то может возникнуть вау-эффект, какие-то новые возможности, скорость. Немного не мало, можно было бы целый фреймворк написать под VBA, нельзя не учитывать сложность С, а тем более C++. Возможно нейросети помогут когда-нибудь пересечь этот барьер.

Добавлено через 2 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Хотя, я же ничего не понимаю в VB, может там что то и рябит.
VB простой как колотушка
1
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,570
Записей в блоге: 27
04.10.2025, 15:11  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Что такое "лишний" код?
Что такое "рябит в глазах" от кода?
Например, я убрал в dll работу с СОМ портами. Там много проверок. Если возникают ошибки, то их выводит dll. Мне уже не надо использовать громоздкий модуль для этого. Например, как тут ( я ещё не стал делать модуль для переменных):
Миниатюры
Как сделать обратный вызов функции из dll?  
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,375
04.10.2025, 15:17
Reverse engineering - в переводе не вьезжаешь и нечего там делать.
---
Всё какие то окна, надписи на них непонятные. А програмировать то где?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
04.10.2025, 15:28
Цитата Сообщение от Argus19 Посмотреть сообщение
я убрал в dll работу с СОМ портами
Зачем?
Чем бы не устроил отдельный класс для работы с COM портом?
Цитата Сообщение от вики
DLL (англ. Dynamic Link Library — «библиотека динамической компоновки», «динамически подключаемая библиотека») в операционных системах Microsoft Windows и IBM OS/2 — динамическая библиотека, дающая возможность многократного использования различными программными приложениями.
У тебя разные программы используют одну и ту же dll?

Я не придираюсь. Не могу понять мотивацию, аргументацию создания DLL.
0
1412 / 876 / 93
Регистрация: 08.02.2017
Сообщений: 3,735
Записей в блоге: 2
04.10.2025, 15:41
Цитата Сообщение от SmallEvil Посмотреть сообщение
У тебя разные программы используют одну и ту же dll?
Как я понимаю, он хочет создать библиотеку на Си для реализации функционала не доступного или трудно реализуемого на VB, при этом одна из экспортируемых функций должна принимать указатель на VB-шную функцию (если я правильно понял). VB, если что, использует соглашение stdcall в своих функциях (если это будет полезно)
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,570
Записей в блоге: 27
04.10.2025, 16:03  [ТС]
Цитата Сообщение от Наталья8 Посмотреть сообщение
Reverse engineering
Надо декомпилировать интересующую программу, понять как она работает и сделать по-своему.
Цитата Сообщение от SmallEvil Посмотреть сообщение
Чем бы не устроил отдельный класс для работы с COM портом?
У меня был модуль для этого. Заменил на dll.
Цитата Сообщение от SmallEvil Посмотреть сообщение
У тебя разные программы используют одну и ту же dll?
Да. Реализация протокола Modbus RTU на разных компах. Кроме открытия-закрытия порта со всеми проверками, ещё и преобразование float32 из полученного байтового массива в число. Причём, у фирмы "ОВЕН" некоторые приборы соблюдают стандарт и передают float32 старшим байтом вперёд, а некоторые - младшим. Всё это реализуется на VB, но с dll проще.
Цитата Сообщение от testuser2 Посмотреть сообщение
Как я понимаю, он хочет создать библиотеку на Си для реализации функционала не доступного или трудно реализуемого на VB, при этом одна из экспортируемых функций должна принимать указатель на VB-шную функцию (если я правильно понял).
Да. Например, TheTrick смог создать поток из VB, но это что-то между гландами и геморроем. Проще это сделать на С++. Я пока до этого не дошёл. Пока задачи более простые.
0
1412 / 876 / 93
Регистрация: 08.02.2017
Сообщений: 3,735
Записей в блоге: 2
04.10.2025, 16:32
Как-то так должно быть, спс нейро
C++
1
2
3
4
5
6
7
8
9
10
// Объявляем тип для указателя на функцию с соглашением __stdcall
typedef void (__stdcall *CallbackFunc)(unsigned int);
 
// Объявляем саму функцию foo3 с соглашением __stdcall
void __stdcall foo3(unsigned int* y, CallbackFunc p)
{
    *y = 72;
    for (int i = 0; i < 10; ++i)
        p(*y);
}
Добавлено через 17 минут
Argus19, а у вас библиотека использует com-интерфейсы?
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,570
Записей в блоге: 27
04.10.2025, 16:40  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
у вас библиотека использует com-интерфейсы?
До этого я тоже не дошёл. Пока использую только стандартные функции Win32API.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2025, 16:40

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

нет ucrtbased.dll, VCRUNTIME140D.dll, MSVCP140D.dll
Я написал небольшую прогу в вижуалке, мне нужно ее открывать на других пк, где ее нет. Если я ее...

Вызов dll ресурсов в dll
Помогите пожалуйста, вот такого рода проблемка вышла: Есть у меня dll и есть необходимость вызвать...

Вызов Dll-фий в другой Dll
не получается дернуть dll в другой dll. Подскажите, как должен происходить вызов dll1 в dll2 ? ...

Вызов dll из dll -> request example
Вызывающий код void (*dllHelloWorld) (void); //ok LPCTSTR s = L&quot;dll.dll&quot;; //ok HINSTANCE...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru