#include <tcl.h>
#include <iostream>
using namespace std;
char* myTraceProc(ClientData clientData, Tcl_Interp* interp, const char* name1, const char* name2, int flags) {
cout << "myTraceProc" << endl;
//changing the object
return NULL;
}
int main(int argc, char* argv[]) {
Tcl_FindExecutable(argv[0]);
Tcl_Interp *interp = Tcl_CreateInterp();
Tcl_TraceVar(interp, "database", TCL_TRACE_WRITES, myTraceProc, 0);
return 0;
}
这是我的C++/tcl程序的一部分。事实上,它不会显示问题,但我会尽力解释它。Tcl:Interpreter创建跟踪对象的副本,并将其更改为
变量database
具有自定义类型。它使用Tcl_RegisterObjType proc注册。问题是,当我用myTraceProc
proc中的跟踪对象进行更改时,解释器会复制该对象(调用Tcl_DupInternalRepProc
)。这是不希望的程序行为。如果克隆没有被创建并且所有费用都用确切的对象来完成,那将会很好。我看了Tcl_TraceVar文档,但没有找到一种方法来禁用它。
这是一个坏主意。改用手柄。 –