Так что это здорово C ++ / TCL , чтобы предоставить нам легко управляемые в TCL C ++ функции и классы через API, такие как:
#include "cpptcl.h"
#include <iostream>
#include <string>
using namespace std;
using namespace Tcl;
void hello()
{
cout << "Hello C++/Tcl!" << endl;
}
int main()
{
interpreter i;
i.def("hello", hello);
string script = "for {set i 0} {$i != 4} {incr i} { hello }";
i.eval(script);
}
В то же время это здорово иметьцикл системных событий обрабатывается в C ++ / Tk с API, например,
#include <string>
#include "cpptk.h"
int main(int argc, char *argv[])
{
std::string script =
"package require Tcl 8.5\n"
"package require Tk 8.5\n"
"ttk::button \".b\" -text \"Say Hello\"\n"
"pack \".b\" -padx 20 -pady 6\n"
;
Tk::details::Expr(script, true);
Tk::runEventLoop();
}
Так что, как вы можете видеть, один из них отлично подходит для создания API, другой - для визуализации графического интерфейса.
Iхочу найти способ смешать их, чтобы, например, работал такой код:
#include "cpptcl.h"
#include "cpptk.h"
#include <iostream>
#include <string>
using namespace std;
using namespace Tcl;
void hello()
{
cout << "Hello C++/Tcl!" << endl;
}
int main()
{
interpreter i;
i.def("hello", hello);
string script =
"package require Tcl 8.5\n"
"package require Tk 8.5\n"
"ttk::button \".b\" -text \"Say Hello\" -command hello \n"
"pack \".b\" -padx 20 -pady 6\n"
;
Tk::details::Expr(script, true);
Tk::runEventLoop();
}
Как сделать такую вещь возможной?Как смешать C ++ / TCL и C ++ / Tk?
Updete:
И так мы сделали это.Требуется некоторое исправление кода сорва CPP / TCL и CPP / Tk, см. наш svn и мой ответ для примера использования .