您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“C語言MFC怎么導出dll回調函數”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C語言MFC怎么導出dll回調函數”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
舉一個簡單的例子,sleep一定時間后通知應用程序函數。
操作流程,如下所示:
在實際開發中肯定不會在dll中將sleep作為回調函數處理,那真是吃飽了撐了,這里,只是用于簡單例子說明,重點是想突出,如何讓dll主動調用應用程序。
該函數由調用dll的程序主動調用,告訴dll需要開始進行定時操作了。
對于這個函數,沒什么過多說明,上一章節講述了如何使用回調函數了,直接上代碼:
.h中聲明
//開始計算定時觸發 _InterrExport void BeginTimerStart(int nTime);//開始計算定時觸發時間
.cpp中實現
_InterrExport void BeginTimerStart(int nTime) { Sleep(nTime); pFuncTimerDescrip("接收到了定時器觸發結束消息~"); }
首先,根據參數進行sleep對應的秒數,時間到達后,由dll主動回調開發程序,其中pFuncTimerDescrip函數就是主動觸發的。
對于pFuncTimerDescrip函數該如何操作呢?
普通的回調方式不在過多說明,直接講解在dll中的回調使用。
在例子中,回調函數是一個類似于TimerTriggerDescrip(std::string sDescrip);
這樣的函數結構。
參數只有一個,并且是字符串類型。
普通的dll導出函數中,參數是一個明確類型的值,比如:int類型、float類型、甚至是一個結構體。
而作為回調函數來說,必不可少的就是注冊回調函數,dll中的回調函數也是如此。
首先,定義回調函數
typedef void (*TimerTriggerDescrip)(std::string sDescrip); //回調函數,定時觸發
其次,注冊回調函數
_InterrExport void CallBackFunc_GetTimerTriggerDescrip(TimerTriggerDescrip callback);
對外部調用者來說,開放的僅僅是注冊回調函數而已。
以上2.1中的所有代碼,都在.h中聲明。
這里所說的觸發,也就是上述代碼:
pFuncTimerDescrip("接收到了定時器觸發結束消息~");
其中,pFuncTimerDescrip就是回調函數的指針。
在.cpp應用中設置
TimerTriggerDescrip pFuncTimerDescrip= nullptr;
到這里,在dll中設置回調函數就完成了,那么接下來,該實現如何在應用程序中調用dll中的回調函數了。
在使用之前一定要記得加載dll,上一章節有詳細介紹,這里就不說明了。
在調用dll的地方需要將回掉函數的函數進行聲明,與普通的dll導出函數方式一致,代碼如下:
typedef void(*TimerTriggerDescrip)(std::string sDescrip); typedef void (*CallBackFunc_GetTimerTriggerDescrip)(TimerTriggerDescrip); CallBackFunc_GetTimerTriggerDescrip pCallFuncTimerDescrip;
TimerTriggerDescrip:該函數是dll庫中,內部觸發應用程序的函數,這里作為回調函數的參數也是需要聲明的。
在注冊時,與普通的dll函數略有不同
//注冊:回調函數 pCallFuncTimerDescrip = (CallBackFunc_GetTimerTriggerDescrip)GetProcAddress(handle, "CallBackFunc_GetTimerTriggerDescrip"); pCallFuncTimerDescrip(CallBack_ReceiveTimerDescrip);
CallBack_ReceiveTimerDescrip:該函數就是對應dll庫中TimerTriggerDescrip函數。
//接收:dll回調函數 void CallBack_ReceiveTimerDescrip(std::string sDescrip) { OutputDebugStringA(sDescrip.c_str()); }
參數與dll中的回調函數保持一致,就可以接收到回調的信息了。
讀到這里,這篇“C語言MFC怎么導出dll回調函數”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。