参考自己之前写的博客:这是模拟回调函数的调用:https://blog.csdn.net/Littlehero_121/article/details/100665262
一、首先是新建dll文件,具体的实现步骤可以参考博客:
https://blog.csdn.net/Littlehero_121/article/details/96159048
二、这边假定是已经完成了dll的新建,
1、则在dll的.h文件中如下代码:
#ifdef CALLLBACK_DLL_EXPORTS
#define CALLLBACK_DLL_API __declspec(dllexport)
#else
#define CALLLBACK_DLL_API __declspec(dllimport)
#endif
#include <windows.h>
#ifdef __cplusplus
extern "C"
{
#endif
typedef void(*CallbackFun)(int);
CALLLBACK_DLL_API void testfun_API(int times, CallbackFun pFun); //回调函数
#ifdef __cplusplus
}
#endif
2、而在.cpp文件中加入如下的代码:
// Callback_dll.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include <iostream>
#include "Callback_dll.h"
void testfun_API(int times,CallbackFun pFun) //模拟API函数或DLL函数
{
for (int i = 0; i < times; ++i)
pFun(i);
printf("hello world\n");
}
3、因为dll文件没办法编译,所以就直接重新生成解决方案,所以就可以直接得到以下dll、lib和最后把.h一起考到新建的文件夹lib下面,如图所示:
好的,现阶段的dll部分已经完成
二、开始进行工程文件的建立,假设已经建立好了,目前就只需要一个源文件,在源文件中代码如下:
// ConsoleAppBrightCon.cpp : 定义控制台应用程序的入口点。
//
#include <stdio.h>
#include "windows.h"
#include <iostream>
extern "C"
{
#include "libs\Callback_dll.h"
}
//调用回调函数中的普通函数
void printWelcome(int len)
{
printf("Welcome%d\n", len);
}
int main()
{
//回调函数
testfun_API(2,printWelcome);
system("pause");
}
1、代码写入完毕,但是这边因为加入了库,所以需要注意几个问题,
(1)加载头文件的路径,如图所示加载进去你的库所在的路径
以上是绝对路径,则相对路径的修改如下:
(2)在连接器中进行如下修改:添加dll目录
(3)在输入中加入lib,如图:
以上差不多就完成了回调函数的调用,结果如图所示:
具体源码参考: https://download.csdn.net/download/littlehero_121/11720884