在进一步执行实现前,请查看 EnumWindows 函数的签名。 EnumWindows 具有以下签名:
BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)
此函数需要回调的线索之一是存在 lpEnumFunc 参数。 经常可以看到在采用指向回调函数的指针的参数名称中 lp(长指针)前缀与 Func 后缀结合在一起。 有关 Win32 函数的文档,请参阅 Microsoft Platform SDK。
创建托管回调函数。 此示例声明一个名为 CallBack 的委托类型,该类型采用两个参数(hwnd 和 lparam)。 第一个参数是窗口的句柄;第二个参数是应用程序定义的。 在此版本中,这两个参数都必须是整数。
回调函数通常返回非零值来指示成功,返回零值来指示失败。 此示例将返回值显式设置为 true 以继续进行枚举。
创建一个委托,并将其作为参数传递到 EnumWindows 函数。 平台调用自动将该委托转换为常见的回调格式。
确保在回调函数完成其工作之前,垃圾回收器不会回收委托。 当将委托作为参数传递,或传递作为字段包括到结构中的委托时,在调用期间不会对其进行回收。 因此,正如下面的枚举示例一样,调用返回并不再需要托管调用方执行任何其他 *** 作之前,回调函数完成其工作。
没有问题啊你在dll的客户端(即调用该dll的模块中)实现一个回调函数函数,例如:
void CALLBACK eipcalback(int cmdtype,char *ip,char *rectime,char *lpn,char *imgfile,BYTE *imgdata,int imgsize,RECT *lpnpos,long userdata)
{
}
然后调用dll导出的SetCallback注册回调:
long pThis = long(this)
SetCallback(long(eipcalback),pThis)
然后dll会在何时的适合调用你的eipcalback函数,并将你传递的pThis指针通过userdata形参传递回来。
第一种方法:将主程序的窗口句柄传递到DLL中去,通过发送自定义消息传递参数第二种方法:主程序启动一个线程去主动获得DLL中的数据。
第三种方法:创建回调函数,通过该回调函数传递参数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)