动态1:由函数名称调用函数

类别:编程语言 点击:0 评论:0 推荐:

前言:本文源于对CSDN论坛中一个问题的解答,现将其整理出来,以帮助有相同需求的朋友。

  对dll进行过动态加载的朋友应该清楚GetProcAddress这个API,其作用是通过一个函数名称从dll模块中获得这个函数的地址,然后将其转换成相应的函数指针供我们调用。
  这便是通过函数名称来调用函数的一个典型例子。下面我们就仿真一下这个函数,主要思路就是建立一张函数映射表。

#include
using namespace std;

// 定义函数入口结构
typedef void (*FUN_PTR)(void);
struct fun_entry
{
  const char* fun_name; // 函数名称
  FUN_PTR fun_ptr; // 函数指针,实际上这里的数据类型也可以是整型
};

// 定义了两个原型不同的函数
void foo1() { cout << "foo1" << endl; }
int foo2(int i) { cout << "foo2:" << i << endl; return 0; }

// 定义函数映射表
fun_entry fun_entry_table[] =
{
  { "foo1", (FUN_PTR)foo1 },
  { "foo2", (FUN_PTR)foo2 }
};

// 模拟GetProcAddress
FUN_PTR get_proc_address(const char* fun_name)
{
  for(int i=0; i

本文地址:http://com.8s8s.com/it/it27319.htm