与C相反的反射

时间:2015-05-20 11:58:42

标签: c# c dynamic reflection

我想知道如何在不在代码中键入函数调用的情况下动态调用C中的函数 我有不同的消息,例如:STARTSTOPTEST 我在库中有函数:process_msg_STARTprocess_msg_STOPprocess_msg_TEST 我想调用正确的函数而不明确地键入Name,比如在C#中使用Reflections或动态运行时 你有什么想法?我是C的新手,我的搜索没有成功。

3 个答案:

答案 0 :(得分:2)

不幸的是,编译后的程序在编译器/链接器完成工作后并不知道函数的名称。在程序运行时,像C#这样的解释语言保留了大部分源代码,因此解释器可以在代码库中搜索某些函数(我并不认为反射实际上是如何工作的)。

你唯一的解决方案是要么有一个将字符串/枚举绑定到函数指针的映射,要么在代码库中使用脚本语言执行类似的过程(如Lua)

答案 1 :(得分:1)

  • 具有成员“name”(字符串)和“fn”(函数指针);
  • 的结构
  • 这种结构的阵列;
  • 循环扫描正确的名称并通过指针调用相应的函数;

答案 2 :(得分:-1)

由于您是c ++的新手,因此学习预编译器指令可能会带您走一些路。例如。这段代码:

#include "stdafx.h"
#include <iostream>
//#define TEST "true"

int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << "a";
    #ifdef TEST
    std::cout << "b";
    #endif
    std::cout << "c";

    return 0;
}

使用#define删除行中的//以打印“b”