У меня есть функция, singleFrameEventHandler, которую я хочу вызывать при возникновении определенного события OnNewFrame. После некоторого исследования мне показалось, что функции, которые обрабатывают события, имеют возвращаемый тип void и принимают параметр типа, который содержит событие. Из того, что я мог найти в Интернете, это делается так:
Объявление функции:
void singleFrameEventHandler(IAFrame ^ frame);
Когда функция назначена для обработки события:
iaframe->OnNewFrame += &singleFrameEventHandler;
Когда я пытаюсь скомпилировать код, содержащий вышеупомянутые сегменты, я получаю следующую ошибку:
error C2664: 'Spiricon::BeamGage::Automation::Interfaces::IAFrame::OnNewFrame::add' : cannot convert parameter 1 from 'void (__clrcall *)(Spiricon::BeamGage::Automation::Interfaces::IAFrame ^)' to 'Spiricon::BeamGage::Automation::Interfaces::newFrame ^'
No user-defined-conversion operator available, or
There is no context in which this conversion is possible
OnNewFrame имеет тип Spiricon :: BeamGage :: Automation :: Interfaces :: newFrame, который, к сожалению, не имеет документации, кроме того, что описывается как «Событие, которое вызывается, когда доступен новый кадр».
В браузере объектов я могу найти некоторую информацию об этом:
public delegate newFrame:
public System.IAsyncResult BeginInvoke(System.AsyncCallback callback, System.Object object)
public System.Void EndInvoke(System.IAsyncResult result)
public System.Void Invoke()
public newFrame(System.Object object, System.IntPtr method)
Конструктор newFrame (?) Кажется лучшим выбором, поскольку он принимает указатель на метод, но когда я пытаюсь использовать его следующим образом:
iaframe->OnNewFrame += gcnew newFrame(iaframe, &singleFrameEventHandler);
Я получаю следующую ошибку:
error C3352: 'singleFrameEventHandler' : the specified function does not match the delegate type 'void (void)'
Значит ли это, что моя функция не должна принимать никаких параметров? Если да, как я могу получить информацию о событии?