关闭

回调函数

420人阅读 评论(0) 收藏 举报
分类:

维基百科的解释:


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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:297506次
    • 积分:7408
    • 等级:
    • 排名:第2970名
    • 原创:440篇
    • 转载:154篇
    • 译文:0篇
    • 评论:51条
    最新评论