С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75

Обработка события внешней программы

17.04.2015, 12:04. Показов 2520. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем,

Пытаюсь написать плагин на C++ для приложения KD. Данное приложение взаимодействует с библиотекой написанной на VB6, или скриптами JS либо VBSript, предварительно подключенные в файле конфигурации "INI". Если просто создать метод:
C++
1
2
3
4
5
6
7
8
bool OnAppQuitAfter(int CallParamBlock)
{
    if (CallParamBlock > 0)
    {
        MessageBoxA(NULL, "Hello!", "Title Box", MB_OK);
    }
    return 1;
}
то на выгоде ничего. Если использовать метод для взаимодействия с приложением VB6, то диалог с сообщением появляется после вызова события OnAppQuitAfter, но затем программа завершается с ошибкой.

Пример кода для VB6:
Header.h
C++
1
2
3
4
5
6
#include <cstdio>
#include <Windows.h>
 
using namespace std;
 
#define EXPORT extern "C" __declspec (dllexport)
Source.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "Header.h"
#include <stdlib.h>
#include <iostream>
#include <windows.h>
 
using namespace std;
 
EXPORT bool OnAppQuitAfter(int CallParamBlock)
{
    if (CallParamBlock > 0)
    {
        MessageBoxA(NULL, "Hello!", "Title Box", MB_OK);
    }
    return 1;
}
У меня есть подозрение, что ошибка вызвана неверным подходом к обработке события. Любые идей приветствуются.
Спасибо
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.04.2015, 12:04
Ответы с готовыми решениями:

Как из программы добавить переменные при вызове внешней программы через system?
В разрабатываемой программе имеются готовые переменные path и аргумент argv возвращающий название файла. Я хочу вызвать на исполнение...

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

Скрытый запуск внешней программы
Здравствуйте, товарищи! Подскажите, можно ли запустить как-то чужую программу в скрытом режиме (в Windows)? Я запускаю программу...

35
Заблокирован
17.04.2015, 12:50
C++
1
OnAppQuitAfter
Это чё? Кто эту функцию "дёргает"? Основной софт? В какой момент времени он её вызывает?
Что ты вообще хочешь сделать? Показать диалоговое окно перед выходом?
Это функция вызывается асинхронно от основного софта?
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 13:16  [ТС]
OnAppQuitAfter - это событие, точнее таким образом метод взаимодействует с программой на событие, возникающее на момент закрытия программы. В JS скрипте все просто, достаточно вызвать функцию:
JavaScript
1
2
3
4
5
6
7
8
function OnAppQuitAfter(CallParamBlock)
{
    if (CallParamBlock > 0)
    {
        // ..
    }
    return 1;
}
но как это сделать в C++, это меня озадачило...
0
Заблокирован
17.04.2015, 13:40
Цитата Сообщение от Vite Посмотреть сообщение
но как это сделать в C++, это меня озадачило...
Что тебя озадачило? Что ты сделать хочешь?
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 13:56  [ТС]
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
Что тебя озадачило? Что ты сделать хочешь?
Почему программа KD завершается с ошибкой?
0
Заблокирован
17.04.2015, 14:01
Цитата Сообщение от Vite Посмотреть сообщение
Почему программа KD завершается с ошибкой?
С какой ошибкой?
Ты деббагером полови, после чего ошибка вылетает. Поставь брейкпоинт на if (CallParamBlock > 0) и скачи дальше ... Надо выяснить, что вызывает ошибку
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 14:14  [ТС]
отладчик останавливается на адресе: 0018D31F add byte ptr [edi+7C0066CAh],dh
0
Заблокирован
17.04.2015, 14:19
Цитата Сообщение от Vite Посмотреть сообщение
отладчик останавливается на адресе: 0018D31F
Слушай, ну ты что реально прикалываешься? Что мне даст адрес процедуры хост софта твоего плагина в виртуальном пространстве на твоей ОС на твоём компе
C++
1
2
3
4
5
6
7
8
EXPORT bool OnAppQuitAfter(int CallParamBlock)
{
    if (CallParamBlock > 0) // <<<<<------ВОТ ТУТ ПОСТАВЬ БРЕЙК ПОИНТ!!!!!!!!!! 
    {
        MessageBoxA(NULL, "Hello!", "Title Box", MB_OK);
    }
    return 1;
}
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 14:23  [ТС]
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
Слушай, ну ты что реально прикалываешься?
Может я не правильно настроил проект?
0
Заблокирован
17.04.2015, 14:27
Цитата Сообщение от Vite Посмотреть сообщение
Может я не правильно настроил проект?
да причём тут эти настройки ...

Ты можешь сделать то, что я тебе сказал? Поставить брейкпоинт на строчку, как туда программа зайдёт = жми F10 чтоб шагнуть дальше, потом ещё дальше и увидишь, после чего вылетает ошибка ...
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 14:40  [ТС]
все я настроил, нужно было указать путь в "General / Output Directory"...я так и сделал, поставил брейк на условие, в самом плагине нет проблем, он проходит полностью и выводит диалог, ошибка возникает в DV.DLL самого приложения KD...
0
Заблокирован
17.04.2015, 15:02
Цитата Сообщение от Vite Посмотреть сообщение
ошибка возникает в DV.DLL самого приложения KD...
А если без твоего плагина, то ошибка не возникает? Если да, то тут может быть не толкьо косяк на стороне разработчика KD, но и на тебе. Смотря что ты делаешь в своём плагине
А вообще конечно поражает не умение 99% задающих тут вопросы пользоваться отладчиком, ведь 99% вопросов можно было бы решить самому за секунду. Ну конечно я не считаю вопросов халявщиков аля "нужно решить... составить блок схему.... препод задал .... " .
Для новичков - https://www.cyberforum.ru/cpp-... 62479.html
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 15:18  [ТС]
я же написал, что ничего не делаю, пока только отлаживаю...в приложении нет ошибки, потому как скрипт JS без проблем выполняется, проблема возникает с плагином, компилированном на C++...я полагаю, возможно это связано с конфликтом экспортируемой функции, на уровне приложения KD...если бы я вызывал функцию из внешнего приложения, то возможно ошибки не было, а тут получается возникает событие...

Добавлено через 6 минут
вот что я получаю в Output:

First-chance exception at 0x0018D31F in kd_app.exe: 0xC0000005: Access violation writing location 0x7C19670E.
Unhandled exception at 0x0018D31F in kd_app.exe: 0xC000041D: Во время обратного вызова пользователя обнаружено необработанное исключение.
0
Заблокирован
17.04.2015, 15:32
Я что то не пойму, ты ещё не разобрался с проблемой что ли?

Если так - показывай код всего плагина
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 15:36  [ТС]
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
Если так - показывай код всего плагина
весь код в самом начале...
0
Заблокирован
17.04.2015, 15:40
Цитата Сообщение от Vite Посмотреть сообщение
весь код в самом начале...


Ну если это весь код и:
1. При проходе отладчиком по этому коду ошибок нет
2. Без этого плагина твоя главная программа работает
3. С плагином программа вылетает после прохода данного кода плагина

то тут можно единственное что предложить, это попробовать вернуть true/ false из OnAppQuitAfter
Может там нужно что то определённое возвращать, а ты всё время 1 хреначишь. Попробуй false.

Если дело не в этом - косяк самого головного софта.
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 15:46  [ТС]
Вот документация SDK: https://www.dropbox.com/s/g53w... U.doc?dl=0

Добавлено через 4 минуты
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
Может там нужно что то определённое возвращать, а ты всё время 1 хреначишь. Попробуй false.
Пробовал, та же фигня...
0
Заблокирован
17.04.2015, 15:53
Я чё то не понял, ты мне наврал что ли? Ты отладчиком не пробегал по своему плагину? Вухаха

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "Header.h"
#include <stdlib.h>
#include <iostream>
#include <windows.h>
 
using namespace std;
 
EXPORT bool OnAppQuitAfter(int CallParamBlock)
{
    if (CallParamBlock > 0)
    {
        MessageBoxA(NULL, "Hello!", "Title Box", MB_OK);
    }
    return 1;
}
Это код чего? CPP файла? Проект какого типа? DLL?
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 16:16  [ТС]
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
Это код чего? CPP файла? Проект какого типа? DLL?
я создал реозиторий: https://github.com/INTITY/KDE
0
Заблокирован
17.04.2015, 16:40
О.. ну там вообще бред какой то в коде.
Поищи по интернете примеры плагинов для твоего софта и посмотри что да как.
У тебя там реально бред.

Добавлено через 1 минуту
для чего ты используешь функцию LoadLibrary может рассказать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.04.2015, 16:40
Помогаю со студенческими работами здесь

Запуск внешней программы перед компиляцией
Задача следующая: Есть код типа: #define SITUATION(N, description) {return N;} void (SomeFunc(){ if (/*some_condition*/...

Не ждать завершения запущенной внешней программы
Я запускаю из своей программы внешний экзешник при помощи system(command). Но данный вариант меня не устраивает, т.к. приходится ждать...

События и их обработка
Подскажите как можно реализовать обработку событий, чтобы можно было использовать примерно такой код: void test_handler(object*...

Обработка события старт программы
Как добиться, чтобы определенный код выполнялся при запуске программы

Autorun программы, обработка события блокировки\разблокировки экрана
Здравствуйте. Заранее хочу сказать, что на Гугл потратил 3 дня, задал вопрос на stackoverflow, но ни кто так и не ответил. Последняя...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru