c++_成员函数回调
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; class CAppleDemo { public: CAppleDemo(); ~CAppleDemo(); void fun1(void); void fun2(int a, int b); int fun3(int a); }; #include <iostream> CAppleDemo::CAppleDemo() { // std::cout << "CAppleDemo::CAppleDemo()" << std::endl; } CAppleDemo::~CAppleDemo() { // std::cout << "CAppleDemo::~CAppleDemo()" << std::endl; } void CAppleDemo::fun1(void) { ShowMessage( "CAppleDemo::fun1()" ); } void CAppleDemo::fun2(int a, int b) { ShowMessage( "CAppleDemo::fun2() a="+(String)a+",b="+(String)b ); } int CAppleDemo::fun3(int a) { ShowMessage( "CAppleDemo::fun2() a="+(String)a); return a; } template<typename dst_type, typename src_type> dst_type pointer_cast(src_type src) { return *static_cast<dst_type*>(static_cast<void*>(&src)); } template<typename dst_type, typename src_type> dst_type union_cast(src_type src) { union{ src_type s; dst_type d; }u; u.s = src; return u.d; } typedef void (__fastcall *FunFun1)(void* pThis, int edx); typedef void (__fastcall *FunFun2)(void* pThis, int edx, int a, int b); typedef int (__fastcall *FunFun3)(void* pThis, int edx, int a); typedef void (__fastcall *FunFunMain)(void* pThis, TObject *Sender); //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { // CAppleDemo cAppleDemo; // FunFun1 fun1 = pointer_cast<FunFun1>(&CAppleDemo::fun1); // FunFun2 fun2 = pointer_cast<FunFun2>(&CAppleDemo::fun2); // FunFun3 fun3 = union_cast<FunFun3>(&CAppleDemo::fun3); // fun1(NULL, NULL); // fun2(NULL, NULL, 11, 22); // fun3(NULL, NULL, 33); FunFunMain pM = union_cast<FunFunMain>(&TForm1::Button1Click); pM(NULL,Sender); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ShowMessage("Button1Click"); } //---------------------------------------------------------------------------