Tcl is able to quickly integrate a wide range of technologies, as well as to easily adapt to new technologies and changing end-user requirements. Therefore it is the integration platform of choice for increasing numbers of developers. TCL has in built Language Bindings for C/C++ languages.
Application invoking Tcl - An application(developed in c/c++) calling the Tcl interpreter
Tcl invoking Application - Tcl calling extensions(developed in c/c++)
Why extend Tcl?
Here are a few reasons:
1. To add domain-specific functionality to Tcl
2. To turn Tcl onto a "better Tcl" - or to support a different programming style
3. To interface the Tcl scripting environment to existing software libraries
4. To hide implementation details by providing only object code releases
5. To rewrite Tcl bottlenecks as C/C++ code for improved performance
6. As a way to incorporate Tcl in an existing body of C/C++ code
7. The last reason is actually the opposite of extending the Tcl environment - in this case, the Tcl interpreter becomes part of an existing application and activated when appropriate
How does a scripting language talk to an Application Language(C/C++)?
Scripting languages are built around a small parser that reads and executes statements on the fly as your program runs. Within the parser, there is a mechanism for executing commands or accessing variables. However, in order to access C functions and variables, it is necessary to tell the parser additional information such as the name of the function, what kind of arguments does it take, and what to do when it is called. Unfortunately, this process can be extremely tedious and technical. SWIG automates the process and allows you to forget about it. In any case, it's probably a good idea to know what's going on under the hood.
Wrapper functions
Suppose you have an ordinary C function like this:
int fact(int n)
{
if (n <= 1) return 1; else return n*fact(n-1); } In order to access this function from a scripting language, it is necessary to write a special "wrapper" function that serves as the glue between the scripting language and the underlying C function. A wrapper function must do three things :
1. Gather function arguments and make sure they are valid.
2. Call the C function.
3. Convert the return value into a form recognized by the scripting language.
ref:
Search this Blog:
TCL Language(C/C++) Bindings
C++/Tcl - A C++ library for interoperability between C++ and Tcl -