解释器中的函数指针

时间:2012-01-26 22:19:26

标签: c function-pointers interpreter abstract-syntax-tree

我正在构建一个构建AST的C-Interpreter(用C ++编写)。我想让用户有机会与真正的DLL进行通信。例如:我从DLL调用函数。该函数需要一个指向函数的指针(用于回调)。有一个问题:我没有函数的真实地址,因为我想给DLL函数的函数只作为我的AST中的节点存在。有办法解决问题吗?我想过在我的解释器中内置一个类似代理的函数,它会委托我的AST中的函数。问题是,代理函数必须具有相同的签名才能从DLL函数中调用...而且我无法在运行时创建动态函数。

1 个答案:

答案 0 :(得分:1)

您没有具体说明您尝试使用哪个API / dll,但其中大部分都提供了提供的“用户数据”的void *(或LPVOID窗口)以及回调函数指针,并将传递给回调函数,以及适用于回调的其他任何参数。

你可以做的是传入一个指向你的AST的指针作为这个额外的指针,并为实际的回调写一个小的包装函数,将这个void *转换回AST *,然后调用你的解释AST。