Подключение к событиям .NET из С++
От: Mishka Норвегия  
Дата: 14.05.02 10:56
Оценка:
Пишу на С# dll:
using System;
using System.Reflection;
namespace Library
{
    public delegate void MyEventHandler();
    public interface ITest
    {
        event MyEventHandler Click;
        int X();
    }
    public class TestComponent : ITest
    {
        public event MyEventHandler Click;
        public int X()
        {
            if (Click != null)
                Click();
            return 100;
        }
    }
}


Делаю из всего этого COM-объект. И потом пытаюсь его использовать в С++:
#include <windows.h>
#include <iostream>
#include <comdef.h>
#import "Library.tlb" raw_interfaces_only
using namespace Library;
int main()
{
    if (FAILED(CoInitialize(NULL))) return 0;
    _bstr_t bstrCLSID = "Library.TestComponent";
    CLSID   clsidTest;
    ITest* pITest;
    if (FAILED(CLSIDFromProgID (bstrCLSID,&clsidTest))) return 0;
    if (FAILED(CoCreateInstance(clsidTest, 0, CLSCTX_ALL, __uuidof(ITest), (void**)&pITest))) return 0;
    pITest->add_Click(...);
    long i;
    pITest->X(&i);
    pITest->remove_Click(...);
    std::cout << i << std::endl;
    pITest->Release();
    CoUninitialize();
    return 0;
}

Так вот вопрос: что нужно передавать в функциях add_Click(...) и remove_Click(...)?
Re: Подключение к событиям .NET из С++
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.05.02 20:39
Оценка:
Здравствуйте Mishka, Вы писали:

M>Так вот вопрос: что нужно передавать в функциях add_Click(...) и remove_Click(...)?


Ты о чем? Тебе к событиям (по COM-овски) подключиться нужно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Подключение к событиям .NET из С++
От: Mishka Норвегия  
Дата: 15.05.02 07:03
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Ты о чем? Тебе к событиям (по COM-овски) подключиться нужно.


Да. Есть мысль (а лучше код ) как это сделать?
Re[3]: Подключение к событиям .NET из С++
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.05.02 17:29
Оценка:
Здравствуйте Mishka, Вы писали:

VD>>Ты о чем? Тебе к событиям (по COM-овски) подключиться нужно.


M>Да. Есть мысль (а лучше код ) как это сделать?


Так вроде MFC позволяет это даже визуально делать.

Хотя мысль сделать интеграцию на MC++ тоже не плохая.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Подключение к событиям .NET из С++
От: Zilog™ Россия  
Дата: 16.05.02 07:46
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Здравствуйте Mishka, Вы писали:


VD>>>Ты о чем? Тебе к событиям (по COM-овски) подключиться нужно.


M>>Да. Есть мысль (а лучше код ) как это сделать?


VD>Так вроде MFC позволяет это даже визуально делать.


Так вроде как они новую идеологию с событиями придумали (не через коннекшн поинты)...
Don't work hard, work smart.
Re: Подключение к событиям .NET из С++
От: Gena_Popov  
Дата: 25.02.03 11:00
Оценка:
Здравствуйте, Mishka, Вы писали:

M>Так вот вопрос: что нужно передавать в функциях add_Click(...) и remove_Click(...)?


Я для этого использовал ConnectionPoint.


CComPtr<IConnectionPointContainer> spCPC;
hr = m_varUnwrappedObject.pdispVal->QueryInterface(IID_IConnectionPointContainer, (LPVOID*)&spCPC);
if (!FAILED(hr))
{
    CComPtr<IConnectionPoint> spCP;
    hr = spCPC->FindConnectionPoint( IID_IEosNetEvents , &spCP);
    DWORD dwCookie = 0;
    if (!FAILED(hr))
    {
        CComPtr<IUnknown> resiver;
        ::CoCreateInstance(__uuidof(CNetUCEventsResiver) , NULL, CLSCTX_SERVER | CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,  IID_IUnknown, (void**) &resiver);
        hr = spCP->Advise(resiver, &dwCookie);
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.