如何实现DLL里面的回调函数

如何实现DLL里面的回调函数,第1张

在进一步执行实现前,请查看 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中的数据。

第三种方法:创建回调函数,通过该回调函数传递参数。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11886517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存