我正在构建一个构建 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/