У меня есть C# .NET класс, имеющий подпись событие, которое подвергается COM с помощью исходящего интерфейса, как это ::Пользовательские обработки событий в COM C++
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IHehServerEvents
{
string EmptyEvent(object sender, CustomEventArgs args);
}
В PluginAPI.h >> У меня есть
class PluginAPI: public IHehServerEvents,public FB::JSAPIAuto//implemented the COM outgoing interface
{
// объявлен метод EmptyEvent основанный на TLH файл
HRESULT __stdcall EmptyEvent(VARIANT sender,IUnknown * args, BSTR * pRetVal);
FB_JSAPI_EVENT(CSharpEvent, 2, (FB::variant,IUnknown *));
}
HRESULT ClassCpluss::EmptyEvent(BSTR message, BSTR * pRetVal)
{....}
Мои события ч elper в заявлении Firebreath является
FB_JSAPI_EVENT(CSharpEvent, 2, (VARIANT,struct _EventArgs *));
Я также видел THIS link. SO boost :: vairant поддерживается правильно? Тогда как заставить VARIANT увеличить :: вариант? Любые изменения, ожидаемые в приведенном выше заявлении? Как обрабатывать вышеуказанное событие в C# с помощью VARIANT или struct? Любые примеры были бы полезны.
Несомненно знал о boost :: function и boost :: bind.But вы можете дать нам ссылку/предоставить пример (обработки COM-событий на C++) и о том, что вы говорите об этом заявлении «попросите его позвонить функтор (посмотрите на boost :: bind и boost :: function) « –
Я не выполнял обработку COM-событий в C++. Чтобы увидеть пример использования функтора, посмотрите класс SimpleStreamsHelper в кодовой базе FireBreath - он использует обратный вызов boost :: function. Чтобы увидеть его, посмотрите на FBTestPlugin, где он использует SimpleStreamsHelper. – taxilian