gpt4 book ai didi

C++/Tk如何执行一般的tcl代码?

转载 作者:行者123 更新时间:2023-11-30 04:33:42 31 4
gpt4 key购买 nike

所以我们有这样的代码:

#include "cpptk.h"
#include <stdio.h>

using namespace Tk;

void hello() {
puts("Hello C++/Tk!");
}

int main(int, char *argv[])
{
static char* str = "button .a -text "Say Hello ppure TCL"\n"
"pack .a\n";
init(argv[0]);

button(".b") -text("Say Hello") -command(hello);
pack(".b") -padx(20) -pady(6);

runEventLoop();
}

假设 str 是复杂的 tcl 代码。我们想将它作为字符串提供给 C++/Tk。我们还希望在我们的通用 C++/Tk 程序和我们在 C++/Tk 代码中创建的 gui 运行时在同一个 TCL vm 中执行它。所以这段代码的结果将是一个窗口内的 2 个按钮。怎么办?

如何做这样的事情?

最佳答案

您是否可以访问 C++/Tk 中使用的 Tcl_Interp* 句柄?如果是这样(并假设您已将其保存在名为 interp 的变量中),请使用:

int resultCode = Tcl_Eval(interp, str);

接下来,检查 resultCode 是否为 TCL_OKTCL_ERROR(其他值也是可能的,但在普通脚本中不常见)。这告诉你对“结果”的解释,你得到的是这样的:

const char *result = Tcl_GetString(Tcl_GetObjResult(interp));

如果结果代码显示错误,result 现在是一条错误消息。如果没问题,result 就是脚本的输出(注意:不是写入标准输出的内容)。这取决于您如何处理。


[编辑]:我更详细地查看了这个。它比看起来更糟糕,因为 C++/Tk 将 Tcl 隐藏得非常深。据我所知,你这样做(未经测试!):

#include "cpptk.h" // might need "base/cpptkbase.h" instead
#include <string>

// This next part is in a function or method...
std::string script("the script to evaluate goes here");
std::string result = Tk::details::Expr(script,true);

关于C++/Tk如何执行一般的tcl代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6541194/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com