精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++生成Dll與回調函數測試

lvxisi ? 來源:lvxisi ? 作者:lvxisi ? 2023-08-29 16:05 ? 次閱讀

1 生成DLL文件

1)打開VisualStudio,選擇創建新項目。

wKgZomTn_uCAZa2KAAEGKAnMq_M932.png

2)選擇c++的動態鏈接庫

wKgaomTn_uKAI-BPAAEW2lDsSQM352.png

3)編寫項目名稱,對應生成dll的名稱,此處命名為MyCallbacks

wKgZomTn_t2ALokBAABYAMkVdSQ299.png

4)右側資源管理器,在頭文件位置,添加新建項。

wKgZomTn_t-AOXmFAACkgMLZJQA567.pngwKgZomTn_t6AHBYUAAATTgn4HaU480.png

5)編寫相關頭文件

wKgaomTn_uKAJAf1AAGKmP2knjU382.png
#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,在里面編寫相關程序

wKgaomTn_uKAG431AAF4xLKu-gA375.png
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平臺,之后在項目上右鍵,選擇生成或重新生成

wKgaomTn_t-ABDLnAADTRDREW4c050.pngwKgaomTn_t2AAivDAABdtbedfk8428.png

生成的文件路徑

wKgaomTn_t-AV6veAABnHDYl1x4795.png

8)可在文件資源管理器中打開文件,進入Debug文件夾,可找到生成的文件。

wKgZomTn_t6AHBYUAAATTgn4HaU480.pngwKgZomTn_t6AdkbEAAAxa6H9Je8428.png

2 測試Dll

1)新建項目

wKgZomTn_t-AQP52AADS0-wXhCc176.png

2)選擇C++的控制臺

wKgZomTn_uKALdROAAEkYTH5jxs970.png

2)填寫項目名稱,選擇創建

wKgaomTn_t-Afj4kAABDhgOkbXs784.png

3)將之前生成的dll和頭文件放在測試工程的文件夾下

wKgZomTn_t-AGScYAABI3wO1ke8969.png

4)在工程中添加cpp文件

wKgaomTn_t-AWnu9AADX4XAeCQE532.png

wKgZomTn_t-AM4kzAAAnWhPWqpw984.png

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 

6)將工程設置為啟動項目

wKgaomTn_t-Adi8tAACEs7QZH70902.png

7)點擊調試運行

chaijie_default.pngwKgaomTn_t-AX8ziAAAnWhPWqpw583.png

8)測試運行正常

wKgZomTn_uCAEwlSAABSee77oCQ755.png

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • dll
    dll
    +關注

    關注

    0

    文章

    115

    瀏覽量

    45380
  • C++
    C++
    +關注

    關注

    22

    文章

    2104

    瀏覽量

    73503
  • Visual
    +關注

    關注

    0

    文章

    252

    瀏覽量

    34225
  • 回調函數
    +關注

    關注

    0

    文章

    87

    瀏覽量

    11543
收藏 人收藏

    評論

    相關推薦

    一文詳解C語言函數指針與調函數

    在講調函數之前,我們需要了解函數指針。
    發表于 10-19 09:34 ?777次閱讀

    C語言里面的函數指針和調函數

    在講調函數之前,我們需要了解函數指針。
    發表于 12-13 10:28 ?591次閱讀

    調函數

    C++內編寫的DLL中有很多事件都是通過調函數來反饋,LABVIEW如何可以調用呢?
    發表于 11-06 15:36

    labview怎么處理dll中的調函數輸出值

    ;FS_xxx > 0") is signaled. Parameters[in] flashStatus The flash status C語言中調函數一和二,直接打印輸出voi
    發表于 02-19 10:21

    C/C++調函數

    C/C++調函數首先看一下調
    發表于 02-11 15:25

    C語言調函數學習

    對指針的應用是C語言編程的精髓所在,而回調函數就是C語言里面對函數指針的高級應用。簡而言之,
    發表于 05-27 09:44 ?7196次閱讀

    調函數的詳細資料說明

    異步事件的處理,首先將異步事件發生時需要執行的代碼編寫成一個函數,并將該函數注冊成為調函數,這樣當該異步事件發生時,系統會自動調用事先注冊
    發表于 02-28 08:00 ?6次下載
    <b class='flag-5'>回</b><b class='flag-5'>調</b><b class='flag-5'>函數</b>的詳細資料說明

    C語言函數調函數

    來源:嵌入式客棧 1 什么是調函數?首先什么是調呢? 我的理解是:把一段可執行的代碼像參數傳遞那樣傳給其他代碼,而這段代碼會在某個時刻被
    的頭像 發表于 09-11 09:57 ?4102次閱讀

    STM32編程時,如何確定中斷調函數的入口

    問題有個通用的解法。下面以ADC1為例,來查找它的中斷調函數。首先打開CubeMX生成的代碼,找到所有中斷函數入口的
    發表于 11-23 18:06 ?13次下載
    STM32編程時,如何確定中斷<b class='flag-5'>回</b><b class='flag-5'>調</b><b class='flag-5'>函數</b>的入口

    詳解調函數的概念及使用步驟

    調函數就是一個被作為參數傳遞的函數。在C語言中,調
    的頭像 發表于 05-26 15:20 ?3981次閱讀

    介紹在C++中實現調的幾種方法

    C++中的一個重要概念就是類,所以我們一般想讓類的成員函數作為調函數(如果直接用非類的成員函數
    的頭像 發表于 01-18 15:09 ?3567次閱讀

    一文詳解C/C++調函數

    首先看一下調函數的官方解釋:調函數就是一個通過函數
    的頭像 發表于 02-12 09:20 ?1519次閱讀

    C語言技巧之調函數

    在講調函數之前,我們需要了解函數指針。
    的頭像 發表于 04-18 11:50 ?751次閱讀

    C語言|調函數的不同用法

    調函數是個高級操作技巧,也是日常項目中常常使用到的技能。之所以說調函數是個高級操作技巧,是因
    發表于 07-10 10:34 ?1262次閱讀

    調函數(callback)是什么?調函數的實現方法

    調函數是一種特殊的函數,它作為參數傳遞給另一個函數,并在被調用函數執行完畢后被調用。
    發表于 03-12 11:46 ?2725次閱讀