Hello All,
I am currently working to re-work a C app with a Tcl/Tk UI. It had been
built on Tcl/Tk 8.0 and I intend to use 8.4.12. My problem comes when I
attempt to execute the compiled C app. When built and run under 8.0, it
works fine. However, I get an error in the function Tcl_Init when built
and run under 8.4.12.
I use the standard Windows Tcl/Tk install programs in both cases. In
order to isolate the problem, I stripped all the code but the init
routines and supplied a simple script to invoke. I compile the code as
follows (MS VS 2003):
For 8.4.12:
cl test.cpp /Ic:\win32app\tcl\include libc.lib kernel32.lib user32.lib
wsock32.lib advapi32.lib mpr.lib winspool.lib netapi32.lib
c:\win32app\tcl\lib\tk84.lib c:\win32app\tcl\lib\tcl84.lib
/NODEFAULTLIB:library
For 8.0:
cl test.cpp /Ic:\win32app\tcl\include libc.lib kernel32.lib user32.lib
wsock32.lib advapi32.lib mpr.lib winspool.lib netapi32.lib
c:\win32app\tcl\lib\tk80vc.lib c:\win32app\tcl\lib\tcl80vc.lib
/NODEFAULTLIB:library
The simple code itself:
_______________________________________________
#include <stdio.h>
#include <tk.h>
#include <tcl.h>
int main(void) {
Tcl_Interp *interp;
interp = Tcl_CreateInterp();
if (Tcl_Init(interp) == TCL_ERROR) {
printf("Error initing Tcl");
return TCL_ERROR;
}
if ((Tk_Init(interp) == TCL_ERROR)) {
printf("Error initing Tk");
return TCL_ERROR;
}
if (Tcl_EvalFile (interp, "c:\\ben\\test\\test\\test.tcl"))
{
fprintf(stderr, "Error in script (%s):%s\n",
"c:\\ben\\test\\test\\test.tcl", interp->result);
return(1);
}
/* Invoke the Tk objects */
Tk_MainLoop();
Tcl_DeleteInterp(interp);
return TCL_OK;
}
________________________________________________________
Any insight would be greatly appreciated.
Ben
<br><font size=2 face="sans-serif">Hello All,</font>
<br>
<br><font size=2 face="sans-serif">I am currently working to re-work a
C app with a Tcl/Tk UI. It had been built on Tcl/Tk 8.0 and I intend
to use 8.4.12. My problem comes when I attempt to execute the compiled
C app. When built and run under 8.0, it works fine. However,
I get an error in the function Tcl_Init when built and run under 8.4.12.</font>
<br>
<br><font size=2 face="sans-serif">I use the standard Windows Tcl/Tk install
programs in both cases. In order to isolate the problem, I stripped
all the code but the init routines and supplied a simple script to invoke.
I compile the code as follows (MS VS 2003):</font>
<br>
<br><font size=2 face="sans-serif">For 8.4.12:</font>
<br>
<br><font size=2 face="sans-serif">cl test.cpp /Ic:\win32app\tcl\include
libc.lib kernel32.lib user32.lib wsock32.lib advapi32.lib mpr.lib winspool.lib
netapi32.lib c:\win32app\tcl\lib\tk84.lib c:\win32app\tcl\lib\tcl84.lib
/NODEFAULTLIB:library</font>
<br>
<br><font size=2 face="sans-serif">For 8.0:</font>
<br>
<br><font size=2 face="sans-serif">cl test.cpp /Ic:\win32app\tcl\include
libc.lib kernel32.lib user32.lib wsock32.lib advapi32.lib mpr.lib winspool.lib
netapi32.lib c:\win32app\tcl\lib\tk80vc.lib c:\win32app\tcl\lib\tcl80vc.lib
/NODEFAULTLIB:library</font>
<br>
<br><font size=2 face="sans-serif">The simple code itself:</font>
<br>
<br><font size=2 face="sans-serif">_______________________________________________</font>
<br>
<br><font size=2 face="sans-serif">#include <stdio.h></font>
<br><font size=2 face="sans-serif">#include <tk.h></font>
<br><font size=2 face="sans-serif">#include <tcl.h></font>
<br>
<br>
<br><font size=2 face="sans-serif">int main(void) {</font>
<br>
<br><font size=2 face="sans-serif"> Tcl_Interp
*interp;</font>
<br>
<br>
<br><font size=2 face="sans-serif"> interp = Tcl_CreateInterp();</font>
<br>
<br>
<br><font size=2 face="sans-serif"> if (Tcl_Init(interp) ==
TCL_ERROR) {</font>
<br><font size=2 face="sans-serif"> printf("Error
initing Tcl"); </font>
<br><font size=2 face="sans-serif"> return TCL_ERROR;</font>
<br><font size=2 face="sans-serif"> } </font>
<br>
<br><font size=2 face="sans-serif"> if ((Tk_Init(interp) ==
TCL_ERROR)) {</font>
<br><font size=2 face="sans-serif"> printf("Error
initing Tk");</font>
<br><font size=2 face="sans-serif"> return TCL_ERROR;</font>
<br><font size=2 face="sans-serif"> }</font>
<br>
<br>
<br><font size=2 face="sans-serif"> if (Tcl_EvalFile (interp,
"c:\\ben\\test\\test\\test.tcl"))</font>
<br><font size=2 face="sans-serif"> {</font>
<br><font size=2 face="sans-serif"> fprintf(stderr,
"Error in script (%s):%s\n", "c:\\ben\\test\\test\\test.tcl",
interp->result);</font>
<br><font size=2 face="sans-serif"> return(1);</font>
<br><font size=2 face="sans-serif"> }</font>
<br>
<br>
<br><font size=2 face="sans-serif">/* Invoke the Tk objects */</font>
<br><font size=2 face="sans-serif"> Tk_MainLoop();</font>
<br><font size=2 face="sans-serif"> Tcl_DeleteInterp(interp);</font>
<br><font size=2 face="sans-serif"> return TCL_OK;</font>
<br><font size=2 face="sans-serif">}</font>
<br>
<br><font size=2 face="sans-serif">________________________________________________________</font>
<br>
<br><font size=2 face="sans-serif">Any insight would be greatly appreciated.</font>
<br>
<br><font size=2 face="sans-serif">Ben</font>
Received on Sun Apr 30 03:13:26 2006