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