将 Qt 函数导出到 Tcl

Posted

技术标签:

【中文标题】将 Qt 函数导出到 Tcl【英文标题】:export Qt function to Tcl 【发布时间】:2014-03-22 22:04:06 【问题描述】:

将Qt编写的代码导出到脚本语言TCL的最佳方法是什么。在 Qt 代码中,我使用 Qt 中的数据结构,如 QMAP、QLIST,而不是 STL 中的数据结构,因此 SWIG 可能无法识别它们,也可能无法识别 Qt 中的其他一些宏。

【问题讨论】:

【参考方案1】:

你需要一个带有这个签名的链接函数:

extern "C" int theFunctionName(ClientData clientData, Tcl_Interp *interp,
                               int argc, char **argv)

您在Tcl_CreateCommand 注册。 (或者有 Tcl_CreateObjCommand,它使用更有效的类型管理系统,但原则上非常相似。)这就是 SWIG 将为您构建的内容,有 很多 指导,但这并不太难DIY,你可能最终会得到一个更好的界面。 (从 Tcl 的角度来看,SWIG 对枚举和位集的处理通常非常单一。)

该链接函数必须确定argv 中的值以创建传递给您的Qt/C++ 代码的值,然后它使用Tcl_SetResultTcl_SetObjResult 将结果存储回Tcl_Interp返回 TCL_OKTCL_ERROR 之前的上下文(表示成功或异常)。

我猜 QMap 看起来像 Tcl 字典,而 QList 看起来像 Tcl 列表,但细节可能会变得相当棘手。细节取决于到底发生了什么(回调之类的东西有点棘手,尤其是在线程代码中!)

【讨论】:

以上是关于将 Qt 函数导出到 Tcl的主要内容,如果未能解决你的问题,请参考以下文章

使用 DLL 时 Qt 应用程序崩溃,如果导出的函数未声明 APIENTRY,则可以正常工作

QT 调用 DLL 方法(三种方法)

如何将 Visual Studio 项目导出到 Qt?

Swig 中 C 指针的访问器函数

将 Visual Studio 项目导出到 Qt 项目

如何将检测到的人脸从函数传递到 Qt 中的单独按钮槽