回调的使用

85 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

回调解释:

A君去B君店里买东西,恰好缺货,A君留下号码给B君,有货时通知A君。

回调是将函数当做一个整体传进去 函数的指针(地址)作为参数传递给另一个函数 当这个指针被用来调用他所指的函数时,称他为回调函数。注意:发送给别人用时一定要发送release版本 且与对方的配置相同

回调优点: 解耦

解耦: 将一个方程式变成能够用单个变量表示的方程组  字面意思 一分多

耦合:  多合一

C++ 组成:

第一步:宏定义函数指针类型

typedef int(*lpAddFun)(int, int);  注意: 这里的参数要和dll 的参数类型相同

第二步: 创建函数指针 并初始化

 lpAddFun addFun = NULL;

第三步:

g_hCtrlInstance = LoadLibrary(strPath);  dll 名称

addFun = (lpAddFun)GetProcAddress(g_hCtrlInstance, "add");/用addFun取代dll库中的add函数

addFun(1,2) 使用结束 如果参数需要写函数 

需要在来一个函数指针:

typedef int(*add_ lpAddFun)(lpAddFun);

第二步 第三步相同 使用不同  addFun(函数)

函数的参数必须和lpAddFun参数相同

C#

C# 的委托(delegate)相当于c++ 的指针

在调用上 c#是这样引入dll文件的

[DllImport("name.dll", *EntryPoint* = "Add",CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]

public extern static int Add(int a, int b);

这个函数是用来获取dll中名为Add,它等同于c++中的第三步 注意的是 获取dll这一块需要单独写一个Class 在使用的时候直接使用这个类就可以了。

C#和c++中dll的区别

他们的区别主要是在底层理念上有分别,但是他的主要逻辑都类似。

C#是基于.net技术。所以,它写出的DLL一般也只能在安装有.net的系统上运行。所以理论上比直接生成机器码的C++的DLL效率要慢一些。

C++调用C#的DLL时,要使用.net相关的东西,比如要求CLR方式编程,不能用MFC架构。