HMODULE hModelHand = LoadLibrary(__T("MyDLL.DLL"));
SetLog pLogShowFun = (SetLog)GetProcAddress(hModelHand, MYTESTFUN);
{ if (NULL == pLogShowFun)
AfxMessageBox(__T("get mydll.dll Adressfehler!"));
}
pLogShowFun((writeLog *)(Mylog::writelog));1234567891011
Betrieb in 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;
}
}
Was ist eine C#-Rückruffunktion? Die C#-Rückruffunktion ist eine von der Anwendung bereitgestellte Funktion, die von der Windows-System-DLL oder einer anderen DLL aufgerufen werden soll. Sie wird im Allgemeinen zum Abfangen von Nachrichten, zum Abrufen von Systeminformationen oder zum Behandeln asynchroner Ereignisse verwendet. Die Anwendung teilt der DLL den Adresszeiger der Rückruffunktion mit und die DLL ruft die Funktion zum entsprechenden Zeitpunkt auf. Die Callback-Funktion muss dem vorgegebenen Parameterformat und der Übertragungsmethode entsprechen, sonst stürzt das Programm oder System ab, sobald die DLL es aufruft. Normalerweise verwendet die Rückruffunktion die Standard-Windows-API-Aufrufmethode, also __stdcall. Natürlich kann der DLL-Compiler die Aufrufmethode selbst definieren, aber auch das Client-Programm muss denselben Vorschriften entsprechen. Im __stdcall-Modus werden die Parameter der Funktion in der Reihenfolge von rechts nach links auf den Stapel verschoben, es sei denn, sie werden explizit als Zeiger oder Referenzen angegeben. Sie sind dafür verantwortlich, die Parameter vom Stapel zu entfernen bevor die Funktion zurückkehrt. C#-Callback-Funktionen verstehen! Wenn ein Programm eine Funktion aufruft (normalerweise als API bezeichnet), entspricht dies dem Aufruf einer Funktion durch ein Programm. Die Beziehung wird wie folgt ausgedrückt: call
Programm------→dll
Wenn ein Programm eine Funktion aufruft, übergibt es die Adresse seiner eigenen Funktion als Parameter an die vom Programm aufgerufene Funktion (dann wird die eigene Funktion als Rückruffunktion bezeichnet, die häufig Rückruffunktionen erfordert). Bestimmte Operationen wiederholen sich. Die Funktion und Beziehung werden wie folgt ausgedrückt: Anruf (Anruf)
Rückruf (Rückruf) Wenn die von Ihnen aufgerufene Funktion den Rückgabewert an die Rückruffunktion übergibt, können Sie die Rückruffunktion verwenden, um bestimmte Vorgänge zu verarbeiten oder abzuschließen. Wie Sie Ihre eigene Rückruffunktion definieren, hängt von der jeweils verwendeten API-Funktion ab. Viele verschiedene Arten von Rückruffunktionen verfügen im Allgemeinen über verschiedene Parameterbeschreibungen, z. B. die Parameter und Rückgabewerte von Die Rückruffunktion: Einfach ausgedrückt wird die Rückruffunktion von der DLL aufgerufen, nachdem die von Ihnen geschriebene Funktion bestimmte Bedingungen erfüllt! Es gibt auch ein Sprichwort (das leichter zu verstehen ist): Die Rückruffunktion ist wie eine Interrupt-Verarbeitungsfunktion, die automatisch vom System aufgerufen wird, wenn die von Ihnen festgelegten Bedingungen erfüllt sind. Das Folgende ist der Beispielcode: WorkClass.cs: usingSystem; namespaceCallBackSample ...{ publicdelegatestringShowMessage(stringmessage); internalclassWorkClass ...{ ShowMessageshowMessage=newShowMessage(showCoolMessage); showMessage+=showTerribleMessage; "; foreach(ShowMessageshinshowMessage.GetInvocationList()) ...{ result+=sh(message); } Console.Write(result); Console.Read(); } privatestringshowCoolMessage(stringmessage) ...{ strings=message+"Cool! "; gibt zurück; } privatestringshowTerribleMessage(stringmessage) ...{ strings=message+"Terrible!"; gibt zurück; } } } program.cs: namespaceCallBackSample ...{ classProgram ...{ staticvoidMain(string[]args) ... { WorkClassworkClass =newWorkClass(); workClass.DoWork("Basketball");
Das obige ist der detaillierte Inhalt vonWie rufe ich eine Rückruffunktion in einer verschachtelten DLL auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!