/*2019-04-16*/
1、定义:
网上定义:
回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。
详细解释:在模块A在调用模块B(比如.dll)中的函数b(),将自己的一个函数a()(这个函数的地址)作为参数传递给b()。b()在需要的时候,利用传递的a()的地址,调用a()函数。这时你可以利用这个机会在回调函数中处理消息或完成一定的操作。
注意:1、回调函数要么是全局函数,要么是静态函数!
2、回调函数由系统调用,所以可以认为它属于WINDOWS系统,不要把它当作你的某个类的成员函数。
3、回调函数必须遵守事先规定好的参数格式和传递方式,否则DLL一调用它就会引起程序或系统的崩溃。
2、例子(使用QT工程):
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_guidemo.h"
class guidemo : public QMainWindow
{
Q_OBJECT
public:
guidemo(QWidget *parent = Q_NULLPTR);
public slots:
void onBtnClicked();
private:
private:
Ui::guidemoClass ui;
};
#include "guidemo.h"
#include <QDebug>
#include "../guilib/guiStart.h"
void testCallback(const std::string& strName, const std::string& strAge)
{
qDebug() << "----------" << QString::fromStdString(strName) << "------" << QString::fromStdString(strAge);
}
uidemo::guidemo(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
connect(ui.pushButton,&QPushButton::clicked, this, &guidemo::onBtnClicked);
}
void guidemo::onBtnClicked()
{
initGuiDll(testCallback);
}
.dll库中文件
#include <string>
#define ExportFun extern "C" _declspec(dllexport)
typedef void (* pCallBack)(const std::string& strName, const std::string& strAge);
ExportFun void initGuiDll(pCallBack pfun);
#include "guiStart.h"
void initGuiDll(pCallBack pfun)
{
pfun("haha","18");
}
上面这个实例中也包含.dll库的创建和使用.