使用?LoadLibrary 載入動態(tài)鏈接庫
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、桑日網(wǎng)絡(luò)推廣、成都微信小程序、桑日網(wǎng)絡(luò)營銷、桑日企業(yè)策劃、桑日品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供桑日建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
取得dll中提供的函數(shù)地址,?Func_Gato_Keypad_SetUploadMsgCallBack
調(diào)用該函數(shù)
動態(tài)鏈接庫用完使用FreeLibrary卸載掉
int my_msg_callback(char *ipAddr, GATO_MSG_TYPE MsgType, GATO_UPLOAD_MSG_T *UploadMsg, void *pUserdata)
{
print("msg");
}
void main()
{
Func_Gato_Keypad_SetUploadMsgCallBack fnSetCallback;
HINSTANCE hDll = LoadLibrary("dllpathname");
if(hDll)
{
??fnSetCallback= (Func_Gato_Keypad_SetUploadMsgCallBack?)GetProcAddress( hDll, "Func_Gato_Keypad_SetUploadMsgCallBack" );
}
if(fnSetCallback)
fnSetCallback(iKeypadID,?my_msg_callback, pUseData);
if(hDll)
FreeLibrary(hDll);
}
回調(diào)函數(shù)就是一個被作為參數(shù)傳遞的函數(shù)。在C語言中,回調(diào)函數(shù)只能使用函數(shù)指針實現(xiàn),在C++、Python、ECMAScript等更現(xiàn)代的編程語言中還可以使用仿函數(shù)或匿名函數(shù)。
回調(diào)函數(shù)的使用可以大大提升編程的效率,這使得它在現(xiàn)代編程中被非常多地使用。同時,有一些需求必須要使用回調(diào)函數(shù)來實現(xiàn)。
最著名的回調(diào)函數(shù)調(diào)用有C/C++標準庫stdlib.h/cstdlib中的快速排序函數(shù)qsort和二分查找函數(shù)bsearch中都會要求的一個與strcmp類似的參數(shù),用于設(shè)置數(shù)據(jù)的比較方法。
意義
因為可以把調(diào)用者與被調(diào)用者分開,所以調(diào)用者不關(guān)心誰是被調(diào)用者。它只需知道存在一個具有特定原型和限制條件的被調(diào)用函數(shù)。簡而言之,回調(diào)函數(shù)就是允許用戶把需要調(diào)用的函數(shù)的指針作為參數(shù)傳遞給一個函數(shù),以便該函數(shù)在處理相似事件的時候可以靈活的使用不同的方法。
必須是靜態(tài)成員函數(shù)或者全局函數(shù)來實現(xiàn)回調(diào)函數(shù)
大概原因是普通的C++成員函數(shù)都隱含了一個傳遞函數(shù)作為參數(shù),即this指針,C++通過傳遞this指針給成員函數(shù)從而實現(xiàn)函數(shù)可以訪問C++的數(shù)據(jù)成員。由于this指針的原因,使得一個普通成員函數(shù)作為回調(diào)函數(shù)時就會因為隱含的this指針問題使得函數(shù)參數(shù)個數(shù)不匹配,從而導致回調(diào)函數(shù)編譯失敗
庫函數(shù)qsort就是一個回調(diào)函數(shù),你可以去搜搜qsort與回調(diào)函數(shù),回調(diào)函數(shù)就是函數(shù)指針做另一個函數(shù)的參數(shù)
看一下這個例子吧,我是這樣理解的:
#include
"iostream.h"
#include
"windows.h"
typedef
void
(CALLBACK
*MyFun)(void);//回調(diào)函數(shù)定義
void
CALLBACK
callback()
//
回調(diào)函數(shù)
{
cout"****callback****\n";
}
void
Call_CallBack(MyFun
mycb)
{
cout"****Call_CallBack****\n";
mycb();
cout"__________________\n";
}
void
main()
{
Call_CallBack(callback);
}
//
其他人需要修改的話只要修改callback函數(shù)里的內(nèi)容就行了,一般sdk封裝后都會有回調(diào),這樣他人在調(diào)用sdk的時候就可以實現(xiàn)回調(diào)函數(shù)里的內(nèi)容。
如果你需要理論的,網(wǎng)上搜回調(diào)函數(shù),內(nèi)容哈多隨便看