WEB开发网
开发学院软件开发VC VC++ 语言中函数和类函数调用过程 阅读

VC++ 语言中函数和类函数调用过程

 2008-11-12 19:28:08 来源:WEB开发网   
核心提示:这两天在研究在C++下实现的反射机制的可能性,的出的结论是可行的,VC++ 语言中函数和类函数调用过程,具体参看我上一主题实现C++的反射实例,现在顺便把研究C++反射机制过程中函数的调用过程写一下,如:CStringvoid SetValue(std::string f_Val){f_Val 获取方式为 lea ea

这两天在研究在C++下实现的反射机制的可能性,的出的结论是可行的,具体参看我上一主题实现C++的反射实例。现在顺便把研究C++反射机制过程中函数的调用过程写一下。利用此特性写了一个通用的 函数转发器,可以调用任何的API函数。

// 初始化映射工厂

InitializeMappingFactory();

IMOKE_METHOD(NULL,&Messagebox,NULL,"hello world.","你好", MB_OK);

在后面加任何东西都不会出错,而且很方便的绕过编译器的参数校验,比如:

IMOKE_METHOD(NULL,&Messagebox,NULL,"hello world.","你好", MB_OK,"123456","7892737");

都没有问题。

好了跑题了,继续说正题:

1. 无返回值的函数调用方法

a. 参数为普通变量,即: int long ulong 和指针

  void SetValue(LONG f_Val)
  {
  f_Val 获取方式为 mov eax, [ebp + 8]
  }
  SetValue(xxx); 的调用方式为
  push xxx
  call SetValue

b. 参数为类对象,如:CString

  void SetValue(std::string f_Val)
  {
  f_Val 获取方式为 lea eax, [ebp + 8]
  }

SetValue(xxx);的调用方式为

esp -> 生成xxx的临时对象 std::string

call SetValue

c. 如果参数以引用方式调用

  void SetValue(std::string &f_Val)
  {
  f_Val 获取方式为 mov eax, [ebp + 8]
  }

SetValue(xxx);的调用方式为

  lea eax, xxx
  push eax
  call SetValue

1 2 3  下一页

Tags:VC 函数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接