Prev: NC-Sim Tcl script tool?
Next: Expect in a shell pipe
From: antred on 31 Aug 2006 11:19 Hello everyone, We've got an MFC application (a test automation tool) which has an embedded Tcl interpreter so the application can run test scripts written in Tcl. So far we've been using just Tcl without the Tk part but now we'd like to be able to have our Tcl scripts create dialogs, popups etc ... which is why the Tk part is also required now. Notice a test script as run in our tool does not necessarily HAVE to use any Tk windows, but some scripts may use them to request input from the user, etc. I have only a very vague understanding of what must be done to set up the interpreter so it is Tk-capable, so I'd definitely appreciate some good advice. So far I'm aware of the following differences: - must link against Tk84.lib as well (not just Tcl84.lib) - need to include tk.h - need to ship Tk84.dll with the application Will I have to ship any additional files? Also, I think setting up the interpreter will look something like this (pseudo code): 1) call Tcl_CreateInterp() 2) Tcl_FindExecutable() 3) Tcl_Init() 4) Tk_Init() 5) done ?? 6) Tcl_Eval( whatever_script_the_user_is_running ) By the way, the interpreter is created in a separate thread from the GUI thread of the application. Does this look right? Did I forget anything? Are there any additional things I need to look out for? Thanks in advance for any helpful replies! Cheers, ant
From: antred on 31 Aug 2006 12:15 Right, after some Googling and lots of fiddling around I've __almost__ got it working: Here's what I do. - Tcl_FindExecutable() - Tcl_CreateInterp() - use Tcl_SetVar() to set the "tcl_library" variable to tell the interpreter where to look for the library scripts - Tcl_Init() ... works - Tk_Init() ... ERROR!! "invalid command name Tcl_findLibrary" I've read posts by other people who've also encountered this problem in their case it was usually a matter of forgetting to call Tcl_Init() before Tk_Init() or the init.tcl script being from another version than the embedded interpreter, but in my case I've made sure that the versions are the same. What else could be causing this error?
From: antred on 31 Aug 2006 12:53 Hmm, I've taken a look at the init.tcl file and there is no definition of a tcl_findLibrary proc in there. I did find that definition in a file called auto.tcl, tho, but apparently Tcl_Init() doesn't lead to that file being sourced also. I'm confused!! =((
From: antred on 31 Aug 2006 13:22 Okay, I'm working around my last prolblem by using a Tcl_Eval call to source auto.tcl as well and it works. Now I have a new problem. The following sample is supposed to display a window saying "hello world": label .hello -text "Hello World" pack .hello Unfortunately it does not. The interpreter executes the commands and then ends. No window is ever shown. =(
From: Don Porter on 31 Aug 2006 13:33
antred wrote: > Hmm, I've taken a look at the init.tcl file and there is no definition > of a tcl_findLibrary proc in there. I did find that definition in a > file called auto.tcl, tho, but apparently Tcl_Init() doesn't lead to > that file being sourced also. I'm confused!! =(( The [tcl_findLibrary] command should be auto-loaded when needed. If not, check 1) Did you redefine the [unknown] command to do something else, interfering with its auto-loading function? 2) Is the tclIndex file missing or corrupt? |