持续创作,加速成长!这是我参与「掘金日新计划 · 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架构。