1 生成DLL文件
1)打开VisualStudio,选择创建新项目。

2)选择c++的动态链接库

3)编写项目名称,对应生成dll的名称,此处命名为MyCallbacks

4)右侧资源管理器,在头文件位置,添加新建项。


5)编写相关头文件

#pragma once
#ifdef MY_SIMPLE_MATH_EXPORTS
#define MY_SIMPLE_MATH_API __declspec(dllexport)
#else
#define MY_SIMPLE_MATH_API __declspec(dllimport)
#endif
// 定义回调函数的签名
typedef void (*CallbackFunction)(int a, int b, int& sum);
// 用于注册回调函数的函数声明
extern "C" MY_SIMPLE_MATH_API void RegisterCallback(CallbackFunction callback);
// 用于触发回调函数的执行的函数声明
extern "C" MY_SIMPLE_MATH_API void TriggerCallback(int a, int b, int& sum);
// 用于代替回调函数,测试dll功能
extern "C" MY_SIMPLE_MATH_API void Sum(int a, int b, int& sum);
// 用于测试dll加载情况
extern "C" MY_SIMPLE_MATH_API int Test();
6)点击dllmain.cpp,在里面编写相关程序

CallbackFunction g_Callback = nullptr;
// 用于注册回调函数的函数
extern "C" __declspec(dllexport) void RegisterCallback(CallbackFunction callback)
{
g_Callback = callback;
}
// 用于触发回调函数的执行
extern "C" __declspec(dllexport) void TriggerCallback(int a, int b, int& sum)
{
if (g_Callback)
{
g_Callback(a, b, sum);
}
}
extern "C" __declspec(dllexport) void Sum(int a, int b, int& sum)
{
sum = a + b;
}
extern "C" __declspec(dllexport) int Initialize() {
return 1;
}
7)选择x86平台,之后在项目上右键,选择生成或重新生成


生成的文件路径

8)可在文件资源管理器中打开文件,进入Debug文件夹,可找到生成的文件。


2 测试Dll
1)新建项目

2)选择C++的控制台

2)填写项目名称,选择创建

3)将之前生成的dll和头文件放在测试工程的文件夹下

4)在工程中添加cpp文件


5)在文件中编程
#include
#include
#include "MyCallbacks.h"
// 定义回调函数的签名
typedef void (*CallbackFunction)(int a, int b, int& sum);
int main() {
int a = 3, b = 4, result = 0;
HMODULE dllHandle = LoadLibraryW(L"MyCallbacks.dll"); // 使用 LoadLibraryW,并使用 L前缀
if (dllHandle) {
// 获取函数指针
auto registerCallback = reinterpret_cast(GetProcAddress(dllHandle, "RegisterCallback"));
auto triggerCallback = reinterpret_cast(GetProcAddress(dllHandle, "TriggerCallback"));
if (registerCallback && triggerCallback) {
// 注册回调函数
registerCallback([](int a, int b, int& sum) {
sum = a + b;
});
// 触发回调
triggerCallback(a, b, result);
std::cout < "Result after callback: " < result < std::endl;
}
FreeLibrary(dllHandle);
}
return 0;
}
6)将工程设置为启动项目

7)点击调试运行


8)测试运行正常

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
dll
+关注
关注
0文章
118浏览量
46336 -
C++
+关注
关注
22文章
2120浏览量
75894 -
Visual
+关注
关注
0文章
255浏览量
34996 -
回调函数
+关注
关注
0文章
89浏览量
11949
发布评论请先 登录
相关推荐
热点推荐
labview怎么处理dll中的回调函数输出值
;FS_xxx > 0") is signaled. Parameters[in] flashStatus The flash status C语言中回调函数一和二,直接打印输出voi
发表于 02-19 10:21
C语言函数的回调函数
来源:嵌入式客栈 1 什么是回调函数?首先什么是回调呢? 我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被
STM32编程时,如何确定中断回调函数的入口
问题有个通用的解法。下面以ADC1为例,来查找它的中断回调函数。首先打开CubeMX生成的代码,找到所有中断函数入口的
发表于 11-23 18:06
?13次下载

评论