При компиляции TCL / Tk вручную из источников или просто установите его из ActiveState, вы получите следующую структуру в папке установки TCL / Tk:
+- bin
+- tcl85.dll
+- tk85.dll
//...
+- lib/
+- tcl8.5/
//All TCL files (.tcl)
+- tk8.5/
//All TK files (.tcl)
//...
Итак, когда вы компилируете какое-то свое приложение и связываете его с TCL и TK DLL, эта DLL ищет все файлы TCL / TK относительно их (для DLL) каталога ../lib/tk8.5 и ../lib/tcl8. 5. Это затрудняет распространение вашего приложения без необходимости заставлять конечных пользователей устанавливать TCL и TK.
Я хочу распространять свое приложение на C ++.
Я использую CPPTK для макета графического интерфейса по умолчанию.
Я хочу сделать это возможным, чтобы конечным пользователям не приходилось устанавливать TCL и TK. Я хочу предоставить им папки с исходными файлами TK и TCL .TCL
, которые будут расположены в каком-то каталоге относительно моего приложения, например extras/TCL
и extras/TK
. Как указать DLL TK и TCL, где находятся папки с исходными файлами? каковы имена функций API TK и TCL для этого? Есть ли для этого какие-то специальные функции cpptk?
Обновление. Итак, я попробовал Donal Fellows ответят со следующей структурой папок.
app/
+- app.exe
+- tcl85.dll
+- tk85.dll
+- extras/
+- tcl/
//All TCL files you can find in TCL install folder/ lib/tcl8.5
+- tk/
//All TK files you can find in TCL install folder/ lib/tk8.5
Мой код выглядел так:
#include <stdio.h>
#include "cpptk/cpptk.h"
using namespace Tk;
int main(int, char *argv[])
{
static char* str = "set extrasDir [file dirname [info nameofexecutable]]/extras\n"
"# Now use it to load some code...\n"
"source $extrasDir/tcl/init.tcl\n"
"# Another way to load code, using all *.tk files from a directory:\n"
"foreach tkFile [glob -nocomplain -directory $extrasDir/tk *.tk] {\n"
" source $tkFile\n"
"}\n";
// This next part is in a function or method...
//std::string script("the script to evaluate goes here");
std::string result = Tk::details::Expr(str,true); // I think this is correct
std::cout<< result << std::endl;
std::cin.get();
Tk::init(argv[0]);
button(".b") -text("Say Hello");
pack(".b") -padx(20) -pady(6);
Tk::runEventLoop();
std::cin.get();
}
Он компилируется, но терпит неудачу в строке 36 cpptkbase.cc
Кстати: я использовал это приложение html \ js для получения строки char.
c
? - person Lightness Races in Orbit   schedule 02.07.2011TCL_LOCAL_MAIN_HOOK
действительно имеет смысл только в Windows (он существует только в Unix из соображений симметрии), и то только потому, что он позволяет вам искатьmain()
после преобразования командной строки в реальные слова ( т.е. проблема, которой нет у платформ Unix). Но я не знаю, почему вы на самом деле практически хотите перехватить в этот момент; это не для неспециалистов IMO (и мне это никогда не было нужно). - person Donal Fellows   schedule 02.07.2011