虽然这不是一个完整的答案,但我可以指出一些事情。
尤其tclsh
是在Windows下相当开心;这是一个主要的支持平台。在实践中可能发生的主要问题是,如果您传递一个包含空格的文件名(由于社区实践的差异,这在 Windows 下明显比在 Unix 上更有可能)。但是,execute()
正如您所写的那样,它没有问题。好吧,只要tclsh
位于PATH
.
将 Tcl 脚本执行与 Qt 集成的另一个主要选项是将您的程序与 Tcl 二进制库链接并使用它。Tcl 的 API 是针对 C 的,所以从 C++ 中使用它应该非常简单(如果从 C++ 的角度来看有点笨拙):
// This holds the description of the API
#include "tcl.h"
// Initialize the Tcl library; *call only once*
Tcl_FindExecutable(NULL);
// Make an evaluation context
Tcl_Interp *interp = Tcl_CreateInterp();
// Execute a script loaded from a file (or whatever)
int resultCode = Tcl_Eval(interp, "source test.tcl");
// Check if an error happened and print the error if it did
if (resultCode == TCL_ERROR) {
std::cerr << "ERROR: " << Tcl_GetString(Tcl_GetObjResult(interp)) << std::endl;
}
// Squelch the evaluation context
Tcl_DeleteInterp(interp);
我不是一个特别出色的 C++ 编码器,但这应该可以给出想法。我不知道QProcess::execute()
vs std::system()
。