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

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

17.04.2015, 12:04. Показов 2524. Ответов 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
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 16:44  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
О.. ну там вообще бред какой то в коде.
Поищи по интернете примеры плагинов для твоего софта и посмотри что да как.
У тебя там реально бред.
Для приложения KD нет примеров на C++, и разработчики тоже не дают ответа. Все что есть, это документация SDK с примерами на VB6 и JS.

А в чем вы находите бред?
0
Заблокирован
17.04.2015, 16:45
Как делать плагины для твоего китчен драва - хз, надо разбираться, на это уйдёт время. У меня его особо нет.
Просто из опыта скажу, что обычно, если под какой то софт можно написать плагин, то для этого софта есть SDK и документация к нему, для твоего возможно как то так называется: KitchenDraw SDK
Обычно в DLL-ке (если винда) плагина реализуется класс, унаследованный от какого то внутреннего интерфейсного класса софта и в этом классе уже что - то реализуешь.

Добавлено через 52 секунды
Цитата Сообщение от Vite Посмотреть сообщение
Для приложения KD нет примеров
А тебе это действительно нужно или ты ради интереса пытаешься что - то сварганить?
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 16:55  [ТС]
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
для чего ты используешь функцию LoadLibrary может рассказать?
пока не для чего, это просто заготовка для вызова функций. Для начала нужно решить проблему ошибки приложения.

Добавлено через 5 минут
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
А тебе это действительно нужно или ты ради интереса пытаешься что - то сварганить?
Проблема в том, что JS не компилируется стандартными инструментами, а VB6 мне как-то не интересно осваивать. Мне хорошо знаком синтаксис C#, но это другое. C++ я только не давно начал изучать, и вот решил попробовать с плагина. У меня есть уже рабочий плагин на JS, мне хотелось реализовать тоже самое на C++, надеюсь получится.
0
Заблокирован
17.04.2015, 16:55
Цитата Сообщение от Vite Посмотреть сообщение
пока не для чего, это просто заготовка для вызова функций. Для начала нужно решить проблему ошибки приложения.
у тебя твой проект с плагином собрался в DLL?
Если ты не используешь пока функцию - убери её
Ты положил свою dll-ку в какую - то определённую папку с плагинами?
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 17:02  [ТС]
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
у тебя твой проект с плагином собрался в DLL?
в настройках проекта даны пути расположения KD, и рабочая директория тоже. А так конечно, DLL собирается без проблем.
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
Ты положил свою dll-ку в какую - то определённую папку с плагинами?
если убрать макрос "EXPORT", то ни чего не происходит, программа просто не видит DLL
0
Заблокирован
17.04.2015, 17:08
Цитата Сообщение от Vite Посмотреть сообщение
если убрать макрос "EXPORT", то ни чего не происходит, программа просто не видит DLL
Ты не ответил на вопрос. Куда ты положил свою DLL-ку или что ты вообще сделал, чтоб твой КД её увидел?

Возможно, если твой КД на столько тупо сделан, что он берёт первую попавшеюся DLL-ку в определённой папке, пытается прорезолвить какие то функции и нt смотря на результат продолжает с ними работать. В таком случае, тебе нужно точно знать, какие функции ( с какими именами) должны быть в твоей DLL (на експорт конечно же)
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 17:10  [ТС]
я руководствовался данным справочником https://msdn.microsoft.com/ru-... xe9k8.aspx
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
17.04.2015, 17:13
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
то для этого софта есть SDK и документация к нему, для твоего возможно как то так называется: KitchenDraw SDK
VoodooPuppet, Обработка события внешней программы

Vite, а поставляются ли плагины вместе с KD? выложите какой-нибудь.
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 17:17  [ТС]
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
Ты не ответил на вопрос. Куда ты положил свою DLL-ку или что ты вообще сделал, чтоб твой КД её увидел?
плагин DLL должен располагаться в корне директории "KD", для подключения, необходимо прописать его в файле конфигурации (space.ini), типа:
[Plupins]
KDE.DLL=

Добавлено через 3 минуты
Цитата Сообщение от schdub Посмотреть сообщение
Vite, а поставляются ли плагины вместе с KD? выложите какой-нибудь.
Да, есть пример написанный на VB6: https://www.dropbox.com/s/wpsd... K.DLL?dl=0
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
17.04.2015, 17:20
Vite, я имел ввиду .dll, поглядите в space.ini
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 17:40  [ТС]
дистрибутив доступен по ссылке: http://www.kitchendraw.com/DOWN/Kd65.exe
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
17.04.2015, 17:42
Лучший ответ Сообщение было отмечено Vite как решение

Решение

Vite, cудя по документации, вы пытаетесь написать событие, верно? И
плагины и события должны быть написаны с помощью ActiveX, причем
Функции для плагинов типа «ActiveX DLL» должны принадлежать к классу «Plugin».
Поглядите инсталляцию, там где-то должно быть определение этого класса.
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 17:48  [ТС]
Цитата Сообщение от schdub Посмотреть сообщение
Vite, cудя по документации, вы пытаетесь написать событие, верно?
Не совсем так, скорее обработчик события.
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 17:56  [ТС]
Цитата Сообщение от schdub Посмотреть сообщение
Поглядите инсталляцию, там где-то должно быть определение этого класса.
ну конечно, так и есть


значит нужно создавать по любому библиотеку COM, и через класс Plugin определять методы...
0
Заблокирован
17.04.2015, 18:03
Цитата Сообщение от Vite Посмотреть сообщение
и через класс Plugin определять методы...
Надо создавать DLL, в которой будет класс, унаследованный от Plugin и будет несколько глобальный функций для получения инстанций данного класса. Так работают все плагины. Найди пример на С++ и посмотри как там всё сделано
0
2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75
17.04.2015, 18:51  [ТС]
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
Надо создавать DLL, в которой будет класс, унаследованный от Plugin
так дело в том, что в KDSDK.DLL нет класса Plugin

Добавлено через 17 минут
все заработало:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Plugin
{
public:
    Plugin();
    ~Plugin();
 
    EXPORT bool OnAppQuitAfter(int CallParamBlock)
    {
        if (CallParamBlock > 0)
        {
            MessageBoxA(NULL, "Hello!", "Title Box", MB_OK);
        }
        return false;
    }
 
};
 
Plugin::Plugin()
{
}
 
Plugin::~Plugin()
{
}
schdub, Вы были правы...Приятно иметь дело с профессионалом

Добавлено через 22 минуты
Что характерно, библиотека не является COM, но при этом все работает.
Интересно, почему данную DLL нельзя подключить в Object Browser...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.04.2015, 18:51
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru