Beasiofun

Си и КОМ объекты чайнику

10.09.2012, 14:22. Показов 4444. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток,
Друзья объясните чайнику как обрабатываются/получаются события КОМ-сервера на Си/Спп

В голове каша, а интересуюсь не из праздного любопытства. С КОМ объектами ранее не общался
да и с мелкософтом ранее сталкивался на уровне программирования мало.(см. никак)
Объесню "на пальцах" задачу да за одно уровень познаний :

есть некоторый сервер по технологии ком и есть описания всех его методов и событий,
с методами (они же привычнее-функции) более менее понятно:

импортируем библиотеку
#import "блабла\\ccLib.dll" //к примеру

подвязываем пространство
using namespace ссLib;

далее говорим

ccLib *serv;

HRESULT hr = CoCreateInstance(CLSID_Название, NULL, CLSCTX_SERVER, IID_Название, (void**)&serv);

в результате получаем нужный набор функционала ...и ПОЛУзагадочное слово "нить" )

далее работаем:

serv->func0(arg1,arg2,и т.д);

тут все ясно как день,"первый раз в первый класс"

а далее начинается "новоучения" для меня

после вызова метода который тебя "подписывает" на события происходящие на сервере
их нужно получить и соответственно обработать.
Я так понимаю (скорее всего не правильно понимаю) что нужно каким то образом указать обработчик событий этого сервера
и как минимум сказать что "это есть обработчик": есть событие - вызывай его.
По аналогии с оконным обработчиком Вин - Сказали что есть класс окна, заполнили и запихали адрес обработчика в структуру,
зарегистрировали в системе, скормили ее адрес в функцию создания окна.Создали окно, начали "фантазировать" обработку полученных от системы сообщений (по сути просто переданных из вне агрументов) внутри функции оконного обработчика.
А с КОМ сервером как сделать подобное я в душе не.. не представляю.

П.С. из за многочисленной документации уже мозг закипает, у меня,честно, задача примитивная - дайте пример просто плз кто знает, уровня "hello world" - как получить event из COM.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.09.2012, 14:22
Ответы с готовыми решениями:

Qt и ком объекты
В 1С с ком объектами работал так ком = новый COMОбъект("Zfpcom.ZekaFP"); ком.Setup(1,115200,150,3); Дальше смотрел в документацию...

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

Как уничтожать динамические объекты и вообще объекты, если это необходимо сделать в их процедурах?
Создать отдельную процедуру CloseObject(Object: TObject) и вызывать ее в конце процедуры или так тоже нельзя? А то бесят эти access...

4
91 / 8 / 1
Регистрация: 02.08.2012
Сообщений: 40
10.09.2012, 17:17
@Beasiofun,
см. вложение
0
Модератор
 Аватар для vxg
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,429
12.09.2012, 08:40
http://bulletinsite.net/index.... ex&page=54
а вы создаете такой объект или пользуетесь объектом поддерживающим такой фокус?
0
Beasiofun
13.09.2012, 13:09
>http://bulletinsite.net/index.... ex&page=54
>а вы создаете такой объект или пользуетесь объектом поддерживающим такой фокус?

я пишу клиент на реализованный сторонний сом-компонент (сервер = EXE; CLSCTX_LOCAL_SERVER), сейчас вроде разобрался как работают вообще ком компоненты (базу понял), по факту нового не чего не узнал с момента своего поста но знания структурировал) так вот задача стоит от а до я - создать (подключить) компонент = сделано, вызвать ряд методов специфических = готово, подписать клиент на события с сервера = сделано, и... получить события с сервера = не знаю как..

Добавлено через 4 минуты
hwms, за ссылочку спасибо, с начало написал.. потом увидел Ваш пост - думаю поможет.. сейчас как раз читаю..
Модератор
 Аватар для vxg
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,429
13.09.2012, 21:46
Схема выглядит так. Клиент вызывает функцию Advise. Пример для OPC DA:
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
25
26
27
28
29
30
31
bool opc_data_callback::connect(IUnknown *group)
{
    bool res = false;
    IConnectionPointContainer *pCPC;
    IConnectionPoint *pCP;
    if
    (
        !this->group &&
        group &&
        SUCCEEDED
        (
            group->QueryInterface
            (
                IID_IConnectionPointContainer, (void **)&pCPC
            )
        )
    )
    {
        if (SUCCEEDED(pCPC->FindConnectionPoint(IID_IOPCDataCallback, &pCP)))
        {
            if (SUCCEEDED(pCP->Advise(static_cast<IUnknown *>(this), &cookie)))
            {
                res = true;
                this->group = group;
            }
            pCP->Release();
        }
        pCPC->Release();
    }
    return res;
}
Здесь: класс opc_data_callback производный от IOPCDataCallback и содержит определения методов которые будет вызывать COM-объект при наступлении событий. При вызове функции Advise COM-объект получает указатель на интерфейс IOPCDataCallback из переданного ему указателя на интерфейс IUnknown. COM-объект будет вызывать условленные методы этого интерфейса при наступлении определенных событий. Для OPC DA это, например, метод OnDataChange при изменении данных на COM-объекте - вызывая этот метод клиентского интерфейса COM-объект будет уведомлять его о наступлении интересующего клиента события передавая в аргументах всю необходимую информацию. Фактически при наступлении данного события COM-объект будет делать вызов
C++
1
2
3
4
5
6
7
8
9
10
11
opc_data_callback_object->OnDataChange(
        dwTransid,
        hGroup,
        hrMasterquality,
        hrMastererror,
        dwCount,
        phClientItems,
        pvValues,
        pwQualities,
        pftTimeStamps,
        pErrors);
Добавлено через 13 минут
За ссылку прошу прощения - там почему-то исчез материал. Просто вбейте в google фразу 3.15 Точки соединения и найдете, то что я хотел передать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.09.2012, 21:46
Помогаю со студенческими работами здесь

Встроенные объекты Java Script. Объекты Array, Date
Создать массив, содержащий названия элементов, находящихся в системном блоке компьютера. Добавить к нему массив, содержащий названия ...

Удалить все объекты и создать объекты - потомки
Как сделать клоны объекта в другом объекте? Использую метод Instantiate Есть метод public Transform Elem; //элемент на...

Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты?
Вопрос прост: как при выходе из функции сохранить объекты, которые были созданы в данной функции (указатели объектов положены в массив)?

В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты начинают двигаться
В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты...

БД избер ком
Всем Доброй ночи . Мне нужно создать базу данных Избирательной комиссии ( непосредственно связь с erwin , с erwin'om все связывается)....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
PostgreSQL в Kubernetes: Подготовка кластера и настройка
Mr. Docker 20.03.2025
Когда доходит до контейнеризации баз данных и особенно таких требовательных к ресурсам системах как PostgreSQL, многие команды до сих пор колеблются, прежде чем перенести их в контейнерную. . .
C++26: Индексирование пакетов и метапрограммиро­вание
bytestream 20.03.2025
Эволюция C++ продолжается стремительными темпами – каждый новый стандарт приносит функциональность, о которой мы мечтали годами. Звучит слишком громко? Если вы когда-либо боролись с вариадическими. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru