亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言MFC怎么導出dll回調函數

發布時間:2022-11-18 10:19:30 來源:億速云 閱讀:107 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“C語言MFC怎么導出dll回調函數”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C語言MFC怎么導出dll回調函數”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    如何將回調函數導出來

    舉一個簡單的例子,sleep一定時間后通知應用程序函數。

    操作流程,如下所示:

    C語言MFC怎么導出dll回調函數

    在實際開發中肯定不會在dll中將sleep作為回調函數處理,那真是吃飽了撐了,這里,只是用于簡單例子說明,重點是想突出,如何讓dll主動調用應用程序。

    dll內部回調函數功能講解

    1:定義開始定時操作函數

    該函數由調用dll的程序主動調用,告訴dll需要開始進行定時操作了。

    對于這個函數,沒什么過多說明,上一章節講述了如何使用回調函數了,直接上代碼:

    .h中聲明

    //開始計算定時觸發
    _InterrExport void BeginTimerStart(int nTime);//開始計算定時觸發時間

    .cpp中實現

    _InterrExport void BeginTimerStart(int nTime)
    {
    	Sleep(nTime);
    	pFuncTimerDescrip("接收到了定時器觸發結束消息~");
    }

    首先,根據參數進行sleep對應的秒數,時間到達后,由dll主動回調開發程序,其中pFuncTimerDescrip函數就是主動觸發的。

    對于pFuncTimerDescrip函數該如何操作呢?

    2:回調函數

    普通的回調方式不在過多說明,直接講解在dll中的回調使用。

    在例子中,回調函數是一個類似于TimerTriggerDescrip(std::string sDescrip);這樣的函數結構。

    參數只有一個,并且是字符串類型。

    2.1:定義回調函數接口

    普通的dll導出函數中,參數是一個明確類型的值,比如:int類型、float類型、甚至是一個結構體。

    而作為回調函數來說,必不可少的就是注冊回調函數,dll中的回調函數也是如此。

    首先,定義回調函數

    typedef void (*TimerTriggerDescrip)(std::string sDescrip); //回調函數,定時觸發

    其次,注冊回調函數

    _InterrExport void CallBackFunc_GetTimerTriggerDescrip(TimerTriggerDescrip callback);

    對外部調用者來說,開放的僅僅是注冊回調函數而已。

    以上2.1中的所有代碼,都在.h中聲明。

    2.2:dll中使用回調函數觸發消息

    這里所說的觸發,也就是上述代碼:

    pFuncTimerDescrip("接收到了定時器觸發結束消息~");

    其中,pFuncTimerDescrip就是回調函數的指針。

    在.cpp應用中設置

    TimerTriggerDescrip pFuncTimerDescrip= nullptr;

    到這里,在dll中設置回調函數就完成了,那么接下來,該實現如何在應用程序中調用dll中的回調函數了。

    應用程序調用dll回調函數

    1:加載dll庫

    在使用之前一定要記得加載dll,上一章節有詳細介紹,這里就不說明了。

    2:聲明回調函數

    在調用dll的地方需要將回掉函數的函數進行聲明,與普通的dll導出函數方式一致,代碼如下:

    typedef void(*TimerTriggerDescrip)(std::string sDescrip);
    typedef void (*CallBackFunc_GetTimerTriggerDescrip)(TimerTriggerDescrip);
    CallBackFunc_GetTimerTriggerDescrip pCallFuncTimerDescrip;

    TimerTriggerDescrip:該函數是dll庫中,內部觸發應用程序的函數,這里作為回調函數的參數也是需要聲明的。

    3:注冊回調函數

    在注冊時,與普通的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回調函數”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    滨海县| 新绛县| 容城县| 镇平县| 昭苏县| 泰顺县| 新河县| 德钦县| 黎平县| 保德县| 延长县| 长沙市| 葫芦岛市| 芮城县| 荣昌县| 吉水县| 历史| 邵东县| 松潘县| 敦化市| 江孜县| 建平县| 蓬莱市| 罗江县| 长顺县| 吐鲁番市| 东丰县| 上饶县| 遂溪县| 邛崃市| 新晃| 共和县| 龙泉市| 淄博市| 商丘市| 盐亭县| 仙桃市| 五台县| 赤城县| 麻栗坡县| 嵊州市|