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

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

17.04.2015, 12:04. Показов 2788. Ответов 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,894
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,894
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,894
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
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru