Как создать обработчик - PullRequest
2 голосов
/ 21 июня 2010

Добавить следующие изменения:

Emily::oSeMac^ Terminal;
    Emily::AsyncSocketController^ _socketManager;
    delegate void DataArrival(String^, array<unsigned char, 1>^, System::Net::IPEndPoint^);

    void _socketManager_onDataArrival(String^ SocketID, array<unsigned char, 1>^ SocketData, System::Net::IPEndPoint^ RemoteIP)
    {
        System::Object^ retData = Terminal->WhoCame (SocketID, SocketData, RemoteIP, _socketManager, 0); 
    }
    Form1(void)
    {
        InitializeComponent();
        _socketManager = gcnew Emily::AsyncSocketController(2000);
        _socketManager->onDataArrival += gcnew DataArrival(this, &AC_WebPassManager::Form1::_socketManager_onDataArrival);
        _socketManager->Start();
        Terminal = gcnew Emily::oSeMac();
    }

Ошибка: ошибка C2664: «Emily :: AsyncSocketController :: onDataArrival :: add»: невозможно преобразовать параметр 1 из «AC_WebPassManager :: Form1 :: DataArrival ^» в «Emily :: AsyncSocketController :: onDataArrivalEventHandler ^ '1> Нет доступного оператора преобразования или 1> Типы, на которые указывают, не связаны;для преобразования требуется reinterpret_cast, приведение в стиле C или приведение в стиле функции 1>

1 Ответ

1 голос
/ 21 июня 2010
_socketManager->onDataArrival += gcnew DataArrival(this,
    &Test::Form1::_socketManager_onDataArrival_);

DataArrival является делегатом:

public delegate DataArrival(String^, array<unsigned char, 1>^, System::Net::IPEndPoint^);

Возможно, оно уже где-то определено с другим именем - посмотрите это определение делегата в пространстве имен Эмили.

...