Аватар для Argus19
1442 / 459 / 78
Регистрация: 24.09.2017
Сообщений: 2,541
Записей в блоге: 24

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

03.10.2025, 16:38. Показов 2331. Ответов 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
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,160
04.10.2025, 14:56

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

Добавлено через 2 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Хотя, я же ничего не понимаю в VB, может там что то и рябит.
VB простой как колотушка
1
 Аватар для Argus19
1442 / 459 / 78
Регистрация: 24.09.2017
Сообщений: 2,541
Записей в блоге: 24
04.10.2025, 15:11  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Что такое "лишний" код?
Что такое "рябит в глазах" от кода?
Например, я убрал в dll работу с СОМ портами. Там много проверок. Если возникают ошибки, то их выводит dll. Мне уже не надо использовать громоздкий модуль для этого. Например, как тут ( я ещё не стал делать модуль для переменных):
Миниатюры
Как сделать обратный вызов функции из dll?  
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,160
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
1401 / 859 / 92
Регистрация: 08.02.2017
Сообщений: 3,643
Записей в блоге: 2
04.10.2025, 15:41
Цитата Сообщение от SmallEvil Посмотреть сообщение
У тебя разные программы используют одну и ту же dll?
Как я понимаю, он хочет создать библиотеку на Си для реализации функционала не доступного или трудно реализуемого на VB, при этом одна из экспортируемых функций должна принимать указатель на VB-шную функцию (если я правильно понял). VB, если что, использует соглашение stdcall в своих функциях (если это будет полезно)
0
 Аватар для Argus19
1442 / 459 / 78
Регистрация: 24.09.2017
Сообщений: 2,541
Записей в блоге: 24
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
1401 / 859 / 92
Регистрация: 08.02.2017
Сообщений: 3,643
Записей в блоге: 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
1442 / 459 / 78
Регистрация: 24.09.2017
Сообщений: 2,541
Записей в блоге: 24
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов. В Main создаём четыре события. . . .
Модель здравоохранения 12. добавление болезней через ресурпул, как аварии
anaschu 22.05.2026
Болезни — это ключевая часть нашей модели. Нам нужно, чтобы работник периодически уходил на больничный, его задание при этом зависало, а после выздоровления работа возобновлялась. Реализуем это двумя. . .
Модель здравоохранения 11. Создаём классы Задание и Работник
anaschu 22.05.2026
В AnyLogic каждая заявка и каждый ресурс — это объект определённого класса. Нам нужно создать два класса: Задание (заявка) и Работник (ресурс). Класс Задание В дереве проекта нажимаем правой. . .
Модель здравоохранения 10. Новая модель, смотрим, как добавлять логические блоки, и что писать внутри
anaschu 22.05.2026
Открываем AnyLogic, создаём новый проект. В дереве проекта появляется класс Main — это главный агент, в котором будет жить вся наша логика. Палитра блоков Слева находится палитра. Нас интересует. . .
модель ЗдравоСохранения 9. Новая модель, разбираемся, как ее создавать
anaschu 22.05.2026
В этой серии постов мы построим модель небольшого рабочего коллектива. Сотрудники получают задания, выполняют их, иногда болеют — и мы хотим посчитать, сколько это стоит компании. Метод. . .
[golang] Linked list
alhaos 22.05.2026
Связный список / Linked list Связный список структура данных позволяющая хранить список значений, в отличии от массива в памяти хранится не сплошным куском, а отдельными частями которые ссылаются. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru