c - 解释器中的函数指针

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

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

最佳答案

您没有具体说明您要使用哪个 API/dll,但其中大多数提供了 void *(或 Windows 上的 LPVOID)与回调函数指针一起提供的“用户数据”将传递给回调函数,连同适合回调的任何其他参数。

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

关于c - 解释器中的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026272/

相关文章:

c++ - Internet Explorer 附加组件列表

c - 排序后使2个多维数组以正确的顺序对齐

c - segmentation fault 运行时错误

c++ - 通用成员函数指针

c - tsearch 和 tfind

C - 如何搜索文件并覆盖其中的一部分

c++ - 外部函数指针声明和类型推断定义

interpreter - 解释型语言与编译型语言相比有什么优势?

string - 解释/测试 ANTLRWorks 2 中的字符串

algorithm - 什么是用于试验简单解释器的简单垃圾收集算法?