2013-07-24 2 views
0

Я использую Tcl 8,6 (окна) и я не могу зарегистрировать и использовать новые каналыTCL C API Создать и зарегистрировать новый канал

std::ofstream file("1.txt"); 

Tcl_Channel kanal = Tcl_CreateChannel(Type, "myChann", file, TCL_WRITABLE); 
Tcl_RegisterChannel(interp, kanal); 

file.close(); 

и тип является

Tcl_ChannelType* Type = new Tcl_ChannelType(); 
Type->closeProc = closeProc; 
Type->inputProc = inputProc; 
Type->outputProc = outputProc; 
Type->typeName = "My own chann"; 
Type->version = TCL_CHANNEL_VERSION_2; 

функции просто, они имеют только зЬй :: COUT

я запустить интерпретатор с помощью сценария

"chan puts myChan whatever" 

и ничего не случилось, никаких ошибок от интерпретатора, нет вывода (консоль, файл). Я не знаю, как укусить это, это первая цель, создать новую шанель и использовать ее, второй - заменить TCL_STDOUT моим собственным каналом (это может быть std :: ofstream), , чтобы при запуске интерпретатора с

"puts WhatEver" 

что строка перейти к станд :: ofstream

ответ

0

Вероятно, вы не промывать выход.

Это может быть сделано с

flush myChan 

Вы также можете настроить свой канал, чтобы смывать в конце строки или всякий раз, когда что-то написано на него:

chan configure myChan -buffering line 

(или none). стандартный вывод по умолчанию настроен -buffering line

+0

когда я «чан флеш myChann» я получаю пейзажный цикл, который запустить outputProc из Tcl_ChannelType *, когда я возвращать 0. и ничего не случилось, когда я вернуть INT toWrite – Jan3Sobieski

+0

прогресс, моя функция была скопирована, но файл по-прежнему пуст. Как я могу получить этот std :: ostream? – Jan3Sobieski

+0

@user Вам необходимо правильно реализовать outputProc, возвращая количество фактически записанных байтов. Если вы всегда возвращаете 0, код флеша просто попробует еще раз. :-) –

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