将Qt函数导出到Tcl
将用Qt编写的代码导出到脚本语言TCL的最佳方法是什么。在代码Qt中,我使用了Qt中的数据结构,如QMAP、QLIST,而不是STL中的数据结构,因此SWIG可能无法识别它们以及Qt中的某些其他宏。您需要一个带有此签名的链接函数:将Qt函数导出到Tcl,qt,tcl,swig,Qt,Tcl,Swig,将用Qt编写的代码导出到脚本语言TCL的最佳方法是什么。在代码Qt中,我使用了Qt中的数据结构,如QMAP、QLIST,而不是STL中的数据结构,因此SWIG可能无法识别它们以及Qt中的某些其他宏。您需要一个带有此签名的链接函数: extern "C" int theFunctionName(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) 您可以使用
extern "C" int theFunctionName(ClientData clientData, Tcl_Interp *interp,
int argc, char **argv)
您可以使用Tcl\u CreateCommand
注册它。(或者有Tcl_CreateObjCommand
,它使用了一个更高效的类型管理系统,但原则上非常相似。)这是SWIG为您构建的,有很多指导,但DIY并不难,您可能最终会得到一个更好的界面。(从Tcl的角度来看,SWIG对枚举和位集的处理通常非常单一。)
该链接函数必须决定argv
中的值,以创建传递给Qt/C++代码的值,然后使用Tcl_SetResult
或Tcl_SetObjResult
将结果存储回Tcl_Interp
上下文,然后返回Tcl_OK
或Tcl_ERROR
(为了成功或例外)
我猜QMap看起来像Tcl字典,QList看起来像Tcl列表,但细节可能会变得相当棘手。细节完全取决于发生了什么(回调之类的东西会变得有点棘手,特别是在线程代码中!)