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文章
115瀏覽量
45380 -
C++
+關注
關注
22文章
2104瀏覽量
73503 -
Visual
+關注
關注
0文章
252瀏覽量
34225 -
回調函數
+關注
關注
0文章
87瀏覽量
11543
發布評論請先 登錄
相關推薦
labview怎么處理dll中的回調函數輸出值
;FS_xxx > 0") is signaled. Parameters[in] flashStatus The flash status C語言中回調函數一和二,直接打印輸出voi
發表于 02-19 10:21
回調函數的詳細資料說明
異步事件的處理,首先將異步事件發生時需要執行的代碼編寫成一個函數,并將該函數注冊成為回調函數,這樣當該異步事件發生時,系統會自動調用事先注冊
發表于 02-28 08:00
?6次下載
C語言函數的回調函數
來源:嵌入式客棧 1 什么是回調函數?首先什么是回調呢? 我的理解是:把一段可執行的代碼像參數傳遞那樣傳給其他代碼,而這段代碼會在某個時刻被
STM32編程時,如何確定中斷回調函數的入口
問題有個通用的解法。下面以ADC1為例,來查找它的中斷回調函數。首先打開CubeMX生成的代碼,找到所有中斷函數入口的
發表于 11-23 18:06
?13次下載
評論