Rumah  >  Artikel  >  tutorial komputer  >  Bagaimana untuk memanggil fungsi panggil balik dalam DLL bersarang?

Bagaimana untuk memanggil fungsi panggil balik dalam DLL bersarang?

WBOY
WBOYke hadapan
2024-01-20 08:27:16968semak imbas

Bagaimana untuk memanggil fungsi panggil balik dalam DLL bersarang?

Bagaimana untuk memanggil fungsi panggil balik dalam DLL bersarang

HMODULE hModelHand = LoadLibrary(__T("MyDLL.DLL"));

SetLog pLogShowFun = (SetLog)GetProcAddress(hModelHand, MYTESTFUN);

{ jika (NULL == pLogShowFun)

AfxMessageBox(__T("dapatkan alamat mydll.dll erro!"));

}

pLogShowFun((writeLog *)(Mylog::writelog));1234567891011

Operasi dalam DLL

#define MyDLL_API extern "C" __declspec( dllexport )

typedef void(*writeLog)(const char *plogFile, int p_nType, const char *logTeks);

writeLog g_RunLog = NULL;

MyDLL_API void mytestfun(void *pfun)

{ jika (pfun)

{

g_RunLog = (writeLog)pfun;

}

}

Terangkan cara melaksanakan fungsi panggil balik C

Apakah fungsi panggil balik C#? Fungsi panggil balik C# ialah fungsi yang disediakan oleh aplikasi untuk dipanggil oleh DLL sistem Windows atau DLL lain Ia biasanya digunakan untuk memintas mesej, mendapatkan maklumat sistem atau mengendalikan peristiwa tak segerak. Aplikasi memberitahu DLL penunjuk alamat fungsi panggil balik, dan DLL memanggil fungsi pada masa yang sesuai. Fungsi panggil balik mesti mematuhi format parameter dan kaedah pemindahan yang telah ditetapkan, jika tidak, program atau sistem akan ranap sebaik sahaja DLL memanggilnya. Biasanya, fungsi panggil balik menggunakan kaedah panggilan API Windows standard, iaitu, __stdcall Sudah tentu, pengkompil DLL boleh mentakrifkan kaedah panggilan sendiri, tetapi program klien juga mesti mematuhi peraturan yang sama. Dalam mod __stdcall, parameter fungsi ditolak ke tindanan mengikut urutan dari kanan ke kiri Melainkan ia ditunjukkan secara eksplisit sebagai penunjuk atau rujukan, parameter dihantar mengikut nilai sebelum fungsi kembali. Fahami fungsi panggil balik C#! Apabila atur cara memanggil fungsi (biasanya dirujuk sebagai api), ia bersamaan dengan atur cara yang memanggil fungsi Perhubungan itu dinyatakan seperti berikut: panggil

program--------------------→dll

Apabila program memanggil fungsi, ia menghantar alamat fungsinya sendiri sebagai parameter kepada fungsi yang dipanggil oleh program (maka fungsinya sendiri dipanggil fungsi panggil balik yang memerlukan fungsi panggil balik selalunya yang mesti dilakukan). operasi tertentu berulang kali Fungsi dan hubungan dinyatakan seperti berikut: panggilan (panggilan)

panggil balik (panggil balik) Apabila fungsi yang anda panggil menghantar nilai pulangan kepada fungsi panggil balik, anda boleh menggunakan fungsi panggil balik untuk memproses atau menyelesaikan operasi tertentu. Mengenai cara untuk menentukan fungsi panggil balik anda sendiri, ia bergantung pada fungsi API khusus yang digunakan Banyak jenis fungsi panggil balik yang berbeza mempunyai pelbagai parameter Penerangan mengenai parameter ini biasanya dijelaskan dalam bantuan, seperti parameter dan nilai pulangan fungsi panggil balik Sebenarnya, secara ringkasnya, fungsi panggil balik dipanggil oleh DLL selepas fungsi yang anda tulis memenuhi syarat tertentu! Terdapat juga pepatah (yang lebih mudah difahami): Fungsi panggil balik adalah seperti fungsi pemprosesan gangguan, yang dipanggil secara automatik oleh sistem apabila syarat yang anda tetapkan dipenuhi. Berikut ialah contoh kod: WorkClass.cs: usingSystem; "; foreach(ShowMessageshinshowMessage.GetInvocationList()) ...{ result+=sh(message } Console.Write(result.Read(); "; returns; } privatestringshowTerribleMessage(stringmessage) ...{ strings=message+"Terrible!"; returns; } } } program.cs: namespaceCallBackSample ...{ classProgram ...{ staticvoidMain(string[]args) ... { WorkClassworkClass =newWorkClass(); workClass.DoWork("Bola Keranjang");

Atas ialah kandungan terperinci Bagaimana untuk memanggil fungsi panggil balik dalam DLL bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:docexcel.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam