Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ilya81
147 / 147 / 10
Регистрация: 19.10.2009
Сообщений: 319
#1

Указать callback для COM+, написанного в .Net - C++

01.04.2011, 10:51. Просмотров 517. Ответов 0
Метки нет (Все метки)

Нужно реализовать на C++ DLL с необъектным интерфейсом, взаимодействующую с .Net. Я решил использовать COM+ и многое работает, но никак не могу сделать подписку на событие .Net и не могу найти ни одного подходящего примера. Сам процедурный тип callback'а в .tlb-файле превращается в такое
Код
    [
      uuid(46BB0CBD-BBD0-3AD3-BD73-74AAB87056C7),
      version(1.0),
      noncreatable,
      custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "RemotingModule.DataChangedEventHandler")
    ]
    coclass DataChangedEventHandler {
        [default] interface _DataChangedEventHandler;
        interface _Delegate;
        interface _Object;
        interface ICloneable;
        interface ISerializable;
    };

    [
      odl,
      uuid(2D83F9B4-CDCF-31ED-A403-5211C2500576),
      hidden,
      dual,
      oleautomation,
      custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "RemotingModule.DataChangedEventHandler")    

    ]
    interface _DataChangedEventHandler : IDispatch {
    };

    [
      odl,
      uuid(7A9A9F54-4C7F-33B3-B19A-9D590A415137),
      version(1.0),
      dual,
      oleautomation,
      custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "COMInteraction.ICOMServer")    

    ]
    interface ICOMServer : IDispatch {
        [id(0x60020000)]
        HRESULT Transfer([in] BSTR str);
        [id(0x60020001)]
        HRESULT Receive([out, retval] BSTR* pRetVal);
        [id(0x60020002)]
        HRESULT add_DataChanged([in] _DataChangedEventHandler* value);
        [id(0x60020003)]
        HRESULT remove_DataChanged([in] _DataChangedEventHandler* value);
    };
И вот как создать в C++ процедурный тип для этого _DataChangedEventHandler, не могу нигде найти примеров. Всё что удалось найти
C++
1
2
3
4
5
    IID iddCallback;
    _DataChangedEventHandler* pCallback;
    bstrCLSID = "{2D83F9B4-CDCF-31ED-A403-5211C2500576}";//uuid
    if (FAILED(IIDFromString  (bstrCLSID,&iddCallback)))
        return 1;
Но что дальше делат с этим iddCallback и как его превратить в pCallback, при этом указав
C++
1
2
3
void __stdcall OnDataChanged(){
//some handling
}
так, чтоб он вызывался, никак не могу разобраться, все примеры останавливаются на этом IDD. Подскажите, пожалуйста, как передать процедурный тип этому методу с таким описанием в .tlh.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2011, 10:51     Указать callback для COM+, написанного в .Net
Посмотрите здесь:
For_each и аргументы callback-функции; Как передать callback'у больше одного аргумента C++
callback функции не для кнопок на экране, а для клавиш на клав. и мышке. Как? C++
Для чего нужны callback-функции C++
C++ Шаблоны и функторы как callback для класса свойства объекта. Код работает - но не должен
Как вытащить исходник из exe, написанного на C# C++
C++ Открытие кода написанного в devC++ в Visual Studio
C++ Как будет выглядеть на C++ часть кода, написанного на Pascal?
C++ Адаптация куска кода, написанного по стандарту C++11, под стандарт C++03
Указать папку для статически подключаемых dll C++
Как указать директорию для динамических библиотек C++
Как указать место для сохранения данных в txt C++
CallBack C++ C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru