2013-07-29 3 views
0

Можно ли расширить dll tcl birary, чтобы иметь возможности ожидать?Как продлить dcl tcl с ожиданием?

У меня есть программа на C, которая выполняет скрипты TCL, используя tcl library tcl85.dll. Он отлично работает.

Недавно я попытался выполнить некоторые сценарии ожидания, и это не удалось. Я понимаю, что tcl85.dll не имеет возможности самостоятельно понимать команды ожидания и что он должен быть расширен. Это то место, где я застрял. У меня есть ожидаемая библиотека expect543.dll, загруженная из activesite, но я не могу понять, как ее расширить с помощью tcl85.dll?

Любая помощь или руководство действительно оценено.

Благодаря Сунил

+2

'package require Expect'? –

ответ

0

В основном нам нужно инициализировать интерпретатор ожидания. Как только это будет сделано, tht TCL_Eval (.) Будет понимать код ожидания.

Tcl_Interp *interp = Tcl_CreateInterp(); 
Tcl_FindExecutable(argv[0]); 

if (Tcl_Init(interp) == TCL_ERROR) { 
    fprintf(stderr,"Tcl_Init failed: %s\n",Tcl_GetStringResult (interp)); 
    (void) exit(1); 
} 
    //Initializing the expect interpreter here 
if (Expect_Init(interp) == TCL_ERROR) { 
    fprintf(stderr,"Expect_Init failed: %s\n",Tcl_GetStringResult (interp)); 
    (void) exit(1); 
} 
//this can now take expect scripts as well in the buffer 
Tcl_Eval(interp, buffer); 
2

Вы должны перестать думать о Tcl и Expect с точки зрения только библиотек DLL: как Tcl DLL и DLL Ожидать реализовать основной функциональность соответствующих частей программного обеспечения, но не полностью само- содержала:

  • интерпретатор Tcl основан на множестве файлов библиотек которые (динамически) выгрузили файловую систему. Эти файлы включают (но не ограничиваются) файлы кодировки, информационные файлы часового пояса и так называемые «базовые пакеты», одним из которых является http.
  • Пакет Expect, являющийся regular Tcl package,, полагается на присутствие по крайней мере специального «индексного файла» (pkgIndex.tcl), который «знает», как правильно загружать и инициализировать библиотеку DLL, содержащую основные функциональные возможности пакета, и которая фактически взаимодействует с пакетом к загрузчику пакетов Tcl.

Таким образом, чтобы сделать всю эту работу, вы примерно должны следовать этому перечню:

  1. Убедитесь, что интерпретатор Tcl вы внедренный в коде is properly initialized, и поэтому он способен загружать внешние пакеты.

  2. Заполните Ожидайте пакет в одном из мест, в котором ваш встроенный интерпретатор ожидает найти внешние пакеты.

    Обязательно прочитайте this, this и this, чтобы понять, как упаковочные машины работает и как специальная глобальная переменная auto_path инициализируется.

  3. Вызовите package require Expect в этих сценариях вашей программы, которые требуют наличия пакета Expect для его загрузки.

В качестве альтернативы можно выполнить соответствующие вызовы на Tcl C API на вашем встроенный интерпретатор, чтобы загрузить DLL в Ожидайте ПАКЕТ напрямую, поэтому он будет доступен для скрипта выполнить позже сразу.

Еще одна альтернатива (которая является хитрым, чтобы получить право на стартер) является использование так называемого "basekit" или «tclkit» — библиотека, Tcl, который имеет определенные пакеты Tcl включены внутри него используя виртуальную файловую систему, так что эти пакеты могут быть загружены во время выполнения с VFS. Эти * комплекты классные, но овладение созданием правильного сложнее, чем просто встраивание «обычного» интерпретатора плюс регулярный пакет, распределенный с основной программой в виде набора файлов.


Один особо отметить: Я не уверен, что лицензия продукта ActiveTcl ™ позволяет срывать различные ее части и использовать их в вашем продукте. IANAL, но я подозреваю, что вы нарушите условия лицензии. Чтобы быть в безопасности, создайте как Tcl, так и Expect от источника —, что не сложно.

+0

Я изменил код, представив Expect_Init (..), который, как вы упомянули, инициализирует интерпретатор ожидания. Однако я не могу выполнить сценарии ожидания. Я попробовал выполнить простой скрипт с командой «spawn test.exe». Однако это дает мне ошибку «система не может найти указанный файл». Тот же скрипт отлично работает, когда я запускаю его в командной строке с помощью команды «tclsh». Любая идея, что я пропустил здесь? –

+0

Согласно вашему комментарию, мне нужно создать индекс, вызвав pkg_mkIndex. Но я не могу понять, как его вызывать. Кроме того, пакет ожиданий, который я загрузил из activesite через чайник, содержит expect.tcl, expect543.dll, injector.dll & pkgIndex.tcl. Значит ли это, что пакет уже создан и предоставлен мне? Также есть упоминание о размещении двоичных файлов в пути к каталогу, указанном в auto_path. Когда я попытался получить значение auto_path, он дает мне «пример \ example \». К сожалению, я не могу понять этот путь. Незлое руководство. –

+0

Не все функции Expect доступны в Windows. Вы подтвердили, что то, что вы пытаетесь сделать, поддерживается? –

Смежные вопросы