ConnectionPoints и делегаты
От: Аноним  
Дата: 22.02.05 04:17
Оценка:
Доброе время суток.

Вопрос такой: как корректно написать сервер с событиями на C# так чтобы потом из VC++ клиента
получать уведомления через ConnectionPointContainer;

Вот пример сервера :

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Drawing;
using System.Reflection;
using opccomn;     //Содержит интерфейс IOPCShutdown с событием ShutdownRequest(string szReason)

namespace OPCCom
{
        public delegate void ShutdownRequestDelegate(string szReason);

    [Guid("79d00415-c808-48ce-888f-f04f71e535eb"),
     ClassInterface(ClassInterfaceType.AutoDual),
     ComSourceInterfaces("opccomn.IOPCShutdown, opccomn")]
    public class CommonServer : opccomn.IOPCCommon
    {
            public event ShutdownRequestDelegate ShutdownRequest;    

        public void GetErrorString(int dwError, out string ppString)
        {
            ppString = "Hello from Vasya";
            if (dwError>100) 
            {
                ShutdownRequest("Слишком большая ошибка > 100");
            }
        }

    }
}


Клиетн на VC++ определяет интерфейс IConnectionPointContainer но ниодной ConnectionPoint там нет.
Подскажите как поправить ситуацию.
Re: ConnectionPoints и делегаты
От: Mika Soukhov Stock#
Дата: 22.02.05 11:45
Оценка:
Здравствуйте, Аноним, Вы писали:

Смотрел http://gzip.rsdn.ru/Forum/Message.aspx?mid=127922&only=1
Автор: zelyony
Дата: 09.11.02
?
ConnectionPoints и делегаты
От: Аноним  
Дата: 22.02.05 16:21
Оценка:
> как корректно написать сервер с событиями на C# так чтобы потом из VC++ клиента получать уведомления через ConnectionPointContainer;

Пример из MSDN:

using System;
using System.Runtime.InteropServices;
namespace EventSource
{
public delegate void ClickDelegate(int x, int y);
public delegate void ResizeDelegate();
public delegate void PulseDelegate();

// Step 1: Defines an event sink interface (ButtonEvents) to be
// implemented by the COM sink.
[GuidAttribute("1A585C4D-3371-48dc-AF8A-AFFECC1B0967") ]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
public interface ButtonEvents
{
void Click(int x, int y);
void Resize();
void Pulse();
}

// Step 2: Connects the event sink interface to a class
// by passing the namespace and event sink interface
// ("EventSource.ButtonEvents, EventSrc").
[b]ComSourceInterfaces[/b](GetType(ButtonEvents))]
public class Button
{
public event ClickDelegate Click;
public event ResizeDelegate Resize;
public event PulseDelegate Pulse;
public Button()
{
}
public void CauseClickEvent(int x, int y)
{
Click(x, y);
}
public void CauseResizeEvent()
{
Resize();
}
public void CausePulse()
{
Pulse();
}
}
}


VC++ клиент должен подключиться к ButtonEvents.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: ConnectionPoints и делегаты
От: Аноним  
Дата: 04.03.05 06:42
Оценка:
Этот пример здорово роботает когда:
1) интерфейс источника описан в проекте.
2) интерфейс источника наследован от IDispatch
А> [GuidAttribute("1A585C4D-3371-48dc-AF8A-AFFECC1B0967") ]
А> [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
А> public interface ButtonEvents
А> {
А> void Click(int x, int y);
А> void Resize();
А> void Pulse();
А> }

У меня беда другая.
Я имел idl фаил. Там интерфейс источника был от IUnknown.
Из idl->tlb->dll всё это сделал и как уже говорилось в итоге у Com объуекта нет точек соединения

Спасибо.
Re: ConnectionPoints и делегаты
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.03.05 09:48
Оценка:
Здравствуйте, Varg, Вы писали:

Просьба выделять исходные коды.
... << RSDN@Home 1.1.4 beta 4 rev. 350>>
AVK Blog
Re: ConnectionPoints и делегаты
От: Аноним  
Дата: 07.03.05 10:35
Оценка:
> Просьба выделять исходные коды.

Я бы с радостью, но как? уже это обсуждалось, см. http://www.gotdotnet.ru/Forums/SiteDiscuss/113485.aspx


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: ConnectionPoints и делегаты
От: Аноним  
Дата: 07.03.05 11:23
Оценка:
А вот так разве не работает:
static void Main()
{
 int i = 0;
}





данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.