2010-06-21 4 views
2

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

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 :: добавить': не удается преобразовать параметр 1 из 'AC_WebPassManager :: Form1 :: DataArrival^to 'Emily :: AsyncSocketController :: onDataArrivalEventHandler ^' 1> Нет доступных операторов с пользовательским преобразованием, или 1> Указанные типы не связаны; преобразование требует reinterpret_cast, приведение в стиле С или функция стиля бросание 1>

ответ

1
 
_socketManager->onDataArrival += gcnew DataArrival(this, 
    &Test::Form1::_socketManager_onDataArrival_); 

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

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

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

+0

ОК, я меняю код Emily :: oSeMac^Terminal; Emily :: AsyncSocketController^_socketManager; public: delegate DataArrival (String ^, массив ^, System :: Net :: IPEndPoint ^); недействительным _socketManager_onDataArrival (String^SocketID, массив <символ без знака, 1>^SocketData, System :: Net :: IPEndPoint^RemoteIP) \t \t { System :: Object^retData = Terminal-> WhoCame (SocketID, SocketData, RemoteIP , _socketManager, 0); \t \t} – user372145

+0

Form1 (пустоты) \t \t { \t \t \t InitializeComponent(); \t \t \t _socketManager = gcnew Emily :: AsyncSocketController (2000); \t \t \t _socketManager-> onDataArrival + = gcnew DataArrival (this, & AC_WebPassManager :: Form1 :: _ socketManager_onDataArrival); \t \t \t _socketManager-> Start(); \t \t \t Terminal = gcnew Emily :: oSeMac(); \t \t} – user372145

+0

Ошибки 1> d: \ projects \ ac_webpassmanager \ ac_webpassmanager \ Form1.h (36): ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором 'DataArrival' 1> d: \ projects \ ac_webpassmanager \ ac_webpassmanager \ Form1.h (36): ошибка C4430: отсутствует спецификатор типа - int. Примечание: C++ не поддерживает default-int 1> d: \ projects \ ac_webpassmanager \ ac_webpassmanager \ Form1.h (36): ошибка C4430: отсутствует спецификатор типа - int. Примечание: C++ не поддерживает default-int 1> d: \ projects \ ac_webpassmanager \ ac_webpassmanager \ Form1.h (36): – user372145