HMODULE hModelHand = LoadLibrary(__T("MyDLL.DLL"));
SetLog pLogShowFun = (SetLog)GetProcAddress(hModelHand, MYTESTFUN);
{ if (NULL == pLogShowFun)
AfxMessageBox(__T("get mydll.dll address erro!"));
}
pLogShowFun((writeLog *)(Mylog::writelog));1234567891011
DLL中操作
#define MyDLL_API extern "C" __declspec( dllexport )
typedef void(*writeLog)(const char *plogFile, int p_nType, const char * logText);
writeLog g_RunLog = NULL;
MyDLL_API void mytestfun(void *pfun)
{ if (pfun)
{
g_RunLog = (writeLog)pfun;
}
}
什麼是C#回呼函數? C#回呼函數是應用程式提供給Windows系統DLL或其它DLL呼叫的函數,一般用於截取訊息、取得系統資訊或處理非同步事件。應用程式把回呼函數的位址指標告訴DLL,而DLL在適當的時候會呼叫該函數。回調函數必須遵守事先規定好的參數格式和傳遞方式,否則DLL一呼叫它就會造成程式或系統的崩潰。通常情況下,回呼函數會採用標準WindowsAPI的呼叫方式,即__stdcall,當然,DLL編制者可以自行定義呼叫方式,但客戶程式也必須遵守相同的規定。在__stdcall方式下,函數的參數按從右到左的順序壓入堆疊,除了明確指明是指標或引用外,參數都按值傳遞,函數返回之前自己負責把參數從堆疊中彈出。理解C#回呼函數!程式在呼叫一個函數(function)時(通常指api).相當於程式(program)呼叫(Call)了一個函數(function)關係表示如下: call(呼叫)
program--------------------→dll
#程式在呼叫一個函數時,將自己的函數的位址作為參數傳遞給程式呼叫的函數時(那麼這個自己的函數稱回呼函數).需要回呼函數的DLL函數往往是一些必須重複執行某些操作的函數.關係表示如下: call(呼叫)
callback(回呼) 當你呼叫的函數在傳遞回傳值給回呼函數時,你就可以利用回呼函數來處理或完成一定的操作。至於如何定義自己的回呼函數,跟具體使用的API函數有關,很多不同類別的回調函數有各種各樣的參數,有關這些參數的描述一般在幫助中有說明回調函數的參數和返回值等.其實簡單說回呼函數就是你所寫的函數滿足某個條件後,就被DLL呼叫!也有這樣的說法(比較容易理解): 回呼函數就好像是中斷處理函數,系統在符合你設定的條件時會自動呼叫。下面是示例代碼:WorkClass.cs: usingSystem; namespaceCallBackSample ...{ publicdelegatestringShowMessage(stringmessage); internalclassWorkClass ...{ publicvoidDoWork(stringmessage) ...{ ShowMessageshowMessage=newShowMessage(showCoolMessage); showMessage =showTerribleMessage; stringresult=""; foreach(ShowMessageshinshowMessage.GetInvocationList()) ...{ result =sh(message); } Console.Write(result); Console.Read(); } privatestringshowCoolMessage(stringmessage) ...{ strings=message "Cool! returns; } privatestringshowTerribleMessage(stringmessage) ...{ strings=message "Terrible!"; returns; } } } program.cs: namespaceCallBackSample ...{ classProgram ...{ staticvoidMain(string[]Class) ...{ Workple ...{ classProgram ...{ staticvoidMain(string[]Class) ...{ =newWorkClass(); workClass.DoWork("Basketball"); } } }
以上是巢狀DLL中的回調函數如何呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!