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

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

03.10.2025, 16:38. Показов 1950. Ответов 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
Заблокирован
04.10.2025, 14:55
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Argus19 Посмотреть сообщение
С++ мне нужен для создания библиотек, чтобы убрать в них "лишний" код.
Не люблю, когда от обилия кода рябит в глазах.
Какие загадки.
Что такое "лишний" код?
Что такое "рябит в глазах" от кода?
Код разбивается на функции/классы/модули. И ничего нигде не рябит.
При чем тут, казалось бы, DLL...
Хотя, я же ничего не понимаю в VB, может там что то и рябит.
0
 Аватар для Наталья8
518 / 368 / 65
Регистрация: 09.03.2016
Сообщений: 3,877
04.10.2025, 14:56

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

Добавлено через 2 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Хотя, я же ничего не понимаю в VB, может там что то и рябит.
VB простой как колотушка
1
 Аватар для Argus19
1424 / 441 / 78
Регистрация: 24.09.2017
Сообщений: 2,522
Записей в блоге: 22
04.10.2025, 15:11  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Что такое "лишний" код?
Что такое "рябит в глазах" от кода?
Например, я убрал в dll работу с СОМ портами. Там много проверок. Если возникают ошибки, то их выводит dll. Мне уже не надо использовать громоздкий модуль для этого. Например, как тут ( я ещё не стал делать модуль для переменных):
Миниатюры
Как сделать обратный вызов функции из dll?  
0
 Аватар для Наталья8
518 / 368 / 65
Регистрация: 09.03.2016
Сообщений: 3,877
04.10.2025, 15:17
Reverse engineering - в переводе не вьезжаешь и нечего там делать.
---
Всё какие то окна, надписи на них непонятные. А програмировать то где?
0
Заблокирован
04.10.2025, 15:28
Цитата Сообщение от Argus19 Посмотреть сообщение
я убрал в dll работу с СОМ портами
Зачем?
Чем бы не устроил отдельный класс для работы с COM портом?
Цитата Сообщение от вики
DLL (англ. Dynamic Link Library — «библиотека динамической компоновки», «динамически подключаемая библиотека») в операционных системах Microsoft Windows и IBM OS/2 — динамическая библиотека, дающая возможность многократного использования различными программными приложениями.
У тебя разные программы используют одну и ту же dll?

Я не придираюсь. Не могу понять мотивацию, аргументацию создания DLL.
0
1381 / 837 / 89
Регистрация: 08.02.2017
Сообщений: 3,506
Записей в блоге: 1
04.10.2025, 15:41
Цитата Сообщение от SmallEvil Посмотреть сообщение
У тебя разные программы используют одну и ту же dll?
Как я понимаю, он хочет создать библиотеку на Си для реализации функционала не доступного или трудно реализуемого на VB, при этом одна из экспортируемых функций должна принимать указатель на VB-шную функцию (если я правильно понял). VB, если что, использует соглашение stdcall в своих функциях (если это будет полезно)
0
 Аватар для Argus19
1424 / 441 / 78
Регистрация: 24.09.2017
Сообщений: 2,522
Записей в блоге: 22
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
1381 / 837 / 89
Регистрация: 08.02.2017
Сообщений: 3,506
Записей в блоге: 1
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
1424 / 441 / 78
Регистрация: 24.09.2017
Сообщений: 2,522
Записей в блоге: 22
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru