回调函数

来源:互联网 发布:javascript英文文献 编辑:程序博客网 时间:2024/05/23 18:53

维基百科的解释:


In computer programming, a callback is a reference to a piece of executable code that is passed as an

argument to other code. This allows a lower-level software layer to call a subroutine (or function) defined

in a higher-level layer.


翻译:
在计算机编程中,一个回调(函数)是一个对一段可执行代码的引用,作为参数传递给其他的代码。这允许软件底层去调用在高层定义的子例程(或函数)

下面创建了一个sort.dll的动态链接库,它导出了一个名为CompareFunction的类型

typedef int (__stdcall *CompareFunction)(const byte*, const byte*)  //它就是回调函数的类型。


1 回调函数和Dll里面的普通导出函数有什么区别?

2 可否认为回调函数和Dll里面的普通导出函数是一样的?

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

4 轻松使用自己的回调函数
 

函数是你定义的,函数体里面该执行什么操作也是你规定。
但是这个函数却不需要你显式的调用(当然也可以)。
dll与exe之间的通讯方式有很多种,可以采用回调函数的方法实现:

简单实现的dll与exe之间的通讯, 其实就是利用了dll的导出函数,先向dll传递一个回调函数的地址,供dll和exe的通讯。exe和dll的通讯:exe直接执行dll导出函数即可。

若A.dll里面在直接使用另一个B.dll里面的函数,则A.dll主动。

(exe与exe之间的通讯:共享内存)

1 声明回调函数类型  typedef int (WINAPI *pFCALLBACK)(int Param1, int Param2);2 声明函数原形(在Exe端)  int WINAPI CallBackFunc(int Param1,int Param2)3 函数实现(在Exe端)int CallBackFunc(){Connect();KkRequest();DdRequest();return 0;}//在动态库里面定一个接口,如下,然后在program里面调用这个接口,同时传递你的回调函数指针externc "C" int Start( char *buf1, char *buf2, pFCALLBACK *pFunction ){int Param1, int Param2;  ...  pFunction( Param1, Param2 );  ...    return 0;}

 

Exe端主动

LoadLibrary( A.dll )

Use  Start( pCallBackFunc ) //将先使用A.dll里面的函数,再使用Exe端的函数

FreeLibrary( A.dll )

 

 

http://www.programfan.com/article/163.html

原创粉丝点击