用户界面-C++/Tk如何执行通用tcl代码
user interface - C++/Tk how to exequte general tcl code?
所以我们有这样的代码:
#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 .an";
init(argv[0]);
button(".b") -text("Say Hello") -command(hello);
pack(".b") -padx(20) -pady(6);
runEventLoop();
}
假设str
是复杂的tcl代码。我们想把它作为一个字符串提供给C++/Tk。此外,我们希望在我们在C++/Tk代码中创建的带有gui的通用C++/Tk程序的同一个TCL vm中执行它。因此,这个代码的结果将是一个窗口中的两个按钮。怎么做这样的事?
怎么做这样的事?
您有权访问C++/Tk内部使用的Tcl_Interp*
句柄吗?如果是这样的话(假设你在一个名为interp
的变量中得到了它(,使用:
int resultCode = Tcl_Eval(interp, str);
接下来,检查resultCode
,看看它是TCL_OK
还是TCL_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++中执行代码覆盖?
- Visual Studio 2017,C++,在单步执行代码时指向错误的行
- 在 R 中执行C++代码
- 通过 dll 注入在主线程中执行代码
- 无法在 c++ 中循环后执行代码
- 执行C 代码时快速频繁的文件访问
- 执行 C++ 代码后出错
- 一个人如何从代表函数的字符串中执行运行时执行C 代码
- 是否可以在程序崩溃后执行代码?
- 第一次在 Linux 上执行 c++ 代码的时间非常慢
- 计算 JSON 中的条目数并相应地执行代码
- 将在 CATCH 块之后执行代码
- 分析执行C++代码的每一行所花费的确切时间
- 我在执行代码时不断得到"Bus Error"?
- c while()..执行代码行的条件
- 从并行线程在主 Maya 线程上执行代码
- 在调用GNUPLOT之后,如何继续执行C 代码