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

这两天在研究在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

时间: 2024-11-03 05:40:04

VC++语言中函数和类函数调用过程的相关文章

C语言中函数声明与调用问题_C 语言

假如函数在调用它之前定义可以不用声明 实际上,如果在函数调用前,没有对函数作声明,则编译系统会吧第一次遇到的该函数的形式(函数定义或者函数调用)作为函数的声明,并将函数默认值类型认为int型 比如有您调用的是void max(int a,int b)系统就会把该函数当做int max(int a,int b);

c-C语言中函数数组调用问题

问题描述 C语言中函数数组调用问题 5C 定义的二维数组为全局变量,在主函数中有多个子函数要用到它.请问下大家,子函数中计算的此二维数组的值间能传递么?还是也需要调用呢?~~ 解决方案 可以传引用或者指针,或者定义为全局变量.那就直接用不用传了. 解决方案二: 传递数组地址或指针,C中没有引用 解决方案三: 你用全局变量,每个函数里面都可以改啊. 解决方案四: 全局的直接访问就行了,就是要注意不要把里面的数据乱改,导致读取出问题 解决方案五: 你使用全局变量,每个函数都可以去访问它并且修改它,会

c语言中函数形参为空指针,调用时可以不用带实参吗?

问题描述 c语言中函数形参为空指针,调用时可以不用带实参吗? 最近在看代码,有地方不太懂 void map_hash_init(void) { map_hash_head = hash_create ((uint32_t (*)(void ))(con_key), (int ()(void *, void *))(Con_comp)); } 这是一个hash表的初始化 hash_creat的原型: hash_create (uint32_t (*hash_key) (), int32_t (*h

非递归二叉树遍历-c语言中函数指针作为参数与函数的嵌套

问题描述 c语言中函数指针作为参数与函数的嵌套 函数指针作为另一函数的参数和函数的嵌套的区别,感觉都是调用,有什么不一样呢?他们都适用在什么情况下!(我是在学非递归遍历二叉树时看到的) Status Visit(TElemType e){ printf("%cn",e); return OK; } Status InOrderTraverse(BiTree T ,Status(*Visit)(TElemType e)){ SqStack S; InitStack(S); Push(S,

c语言中函数中变量范围的问题?

问题描述 c语言中函数中变量范围的问题? ATT 测试环境:vs2013 win7 直接上代码 # include <stdio.h> # include <stdlib.h> void switch_a () //声明switch_a函数 void menu()//声明menu函数 int main() { int a, b; //参加运算的两个数字 int c; //判断进行什么运算的变量 printf("欢迎使用四则运算器n"); printf("

C语言中函数与指针的应用总结_C 语言

1. 首先,在C语言中函数是一种function-to-pointer的方式,即对于一个函数,会将其自动转换成指针的类型. 复制代码 代码如下: #include<stdio.h> void fun(){} int main(void){   printf("%p %p %p\n", &fun, fun, *fun);   return 0;} -------------------------------------------------------------

jni- cocos2d中函数通过JNI调用android中类方法的疑问

问题描述 cocos2d中函数通过JNI调用android中类方法的疑问 如题,我试图在cocos2d中调用android的某方法,android中被调用方法如下: public class AppActivity extends Cocos2dxActivity { static { System.loadLibrary("cocos2dcpp"); } public static void gotoActivity() { Intent in = new Intent(AppAct

函数调用-c语言中函数返回值类型的问题

问题描述 c语言中函数返回值类型的问题 看一道改错题: #include #include #include proc(int k)//很显然根据主调函数和返回值类型知道这里缺少类型 { int n;float s,w,p,q; n=1; s=1.0; while(n<=k){ w=2.0*n; p=w-1.0; q=w+1.0; s=s*w*w/p/q; n++; } return s; } void main(){ system("CLS"); printf("%f

简单模拟struts中的Interceptor的调用过程遇到的问题

问题描述 简单模拟struts中的Interceptor的调用过程遇到的问题 不明白struts中Interceptor的调用过程(Interceptors的遍历过程),自己写了个小程序测试.得不到想要的结果 求大神指点啊~~ 代码如下: public class Interceptor { Invocation test; String name; public Interceptor(String name){ this.name=name; } public String intercep