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");
}
//---------------------------------------------------------------------------

 

posted @ 2020-10-21 15:36  leochan007  阅读(162)  评论(0编辑  收藏  举报