2 / 2 / 3
Регистрация: 02.12.2014
Сообщений: 75

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

17.04.2015, 12:04. Показов 2810. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru