我正在构建一个构建AST的C-Interpreter(用C ++编写)。我想让用户有机会与真正的DLL进行通信。例如:我从DLL调用函数。该函数需要一个指向函数的指针(用于回调)。有一个问题:我没有函数的真实地址,因为我想给DLL函数的函数只作为我的AST中的节点存在。有办法解决问题吗?我想过在我的解释器中内置一个类似代理的函数,它会委托我的AST中的函数。问题是,代理函数必须具有相同的签名才能从DLL函数中调用...而且我无法在运行时创建动态函数。
答案 0 :(得分:1)
您没有具体说明您尝试使用哪个API / dll,但其中大部分都提供了提供的“用户数据”的void *
(或LPVOID
窗口)以及回调函数指针,并将传递给回调函数,以及适用于回调的其他任何参数。
你可以做的是传入一个指向你的AST的指针作为这个额外的指针,并为实际的回调写一个小的包装函数,将这个void *
转换回AST *
,然后调用你的解释AST。