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