如何在tcl中的load命令上使用interp arg?
我对tcl很陌生 我试图使用load命令加载dll,但出现未定义的符号错误 我很确定这条消息暗示dll是用于特定(专有)解释器的 如果我尝试从“wish”加载,我会得到错误,但是如果我从专用解释器加载,它会加载得很好 我看到,在load命令中,我可以传入packageName和interp。 我在想,如果我传入专有的解释器,我可能可以让它工作,但是如果我传入解释器的路径,我会收到一条错误消息,说它不能对解释器进行罚款。 有人知道interp=期望的是什么吗 顺便说一句,我不能只使用专有的解释器,因为我只是试图从ruby调用tcl命令,而且我没有使用该解释器编译ruby的头如何在tcl中的load命令上使用interp arg?,tcl,Tcl,我对tcl很陌生 我试图使用load命令加载dll,但出现未定义的符号错误 我很确定这条消息暗示dll是用于特定(专有)解释器的 如果我尝试从“wish”加载,我会得到错误,但是如果我从专用解释器加载,它会加载得很好 我看到,在load命令中,我可以传入packageName和interp。 我在想,如果我传入专有的解释器,我可能可以让它工作,但是如果我传入解释器的路径,我会收到一条错误消息,说它不能对解释器进行罚款。 有人知道interp=期望的是什么吗 顺便说一句,我不能只使用专有的解释器,
对于这些命令,我会收到一条错误消息,指出存在未定义的符号。加载命令有两个作用:
dlopen()
,在Windows上则是LoadLibraryEx()
)foobar72.dll
,则该函数将被调用Foobar\u Init
。Tcl始终假定初始化函数的类型签名如下:
int InitFunc(Tcl_Interp*Interp);
要说对你来说最好的方法是什么,我们需要更多的信息。您最好将其作为一个单独的问题来表达。如果您想查看一个相当典型的初始化函数,这是非常合理的。它调用
Tcl\u InitStubs
(以获得API/ABI访问权),向Tcl\u CreateObjCommand
注册一些命令,然后调用Tcl\u PkgProvideEx
将包标记为正确存在。谢谢,我也尝试了swig方法,但我也遇到了问题,请参见:@nPn:我自己不使用swig方法,但是当接口C++(与C相反)时,最好手工编写包装器。当然,它的难度取决于细节,但需要记住的关键是,Tcl是作为C库实现的,所有回调都必须是函数(不是方法,也不是直接调用)并具有C链接。谢谢,但我实际上正在尝试使用ruby。。。上面提到的原因是有可用的tcl绑定,但是当我尝试加载它们时,会收到上面提到的错误消息。我实际上是在尝试从ruby调用tcl函数。所以我想试试SWIG。@nPn去Ruby?使用基本库可能是一种合理的方法。(不过我也无能为力;我根本不知道Ruby的C API。)