From: antred on
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
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
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
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
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?
 |  Next  |  Last
Pages: 1 2
Prev: NC-Sim Tcl script tool?
Next: Expect in a shell pipe