【发布时间】:2010-08-13 14:15:02
【问题描述】:
我有一个函数,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)'
这是否意味着我的函数必须不带参数?如果是这样,我将如何获得有关该事件的信息?
【问题讨论】:
标签: .net events event-handling c++-cli