2017-01-23 1 views
0

문제가 생겨서 고맙습니다.C 응용 프로그램에서 tcl/tk 인터프리터에 tcl 명령을 보내는 방법

내가 tcl/tk 응용 프로그램과 인터프리터 'x.y.123.3454'를 가지고 있고 'x.y.123.3454'에 정의 된 tcl 절차를 C 응용 프로그램에서 보내려한다고 가정합시다.

예를 들어, puts "Hello World"을 C 응용 프로그램에서 'x.y.123.3454'로 보내려고합니다. 그것을하는 방법?

궁금한 점이 있다면 왜 그 절차를 & 명령으로 tcl 해석기에서 직접 실행하지 않는지 알려주세요.

+0

. 'C'프로세스의 내용은 tcl 명령을 실행하기 위해 수신시 TCL 프로세스에서 '평가'될 수있는 텍스트입니다. – Sharad

+0

자세히 설명해 주시겠습니까? 당신이 언급 한 것이 무엇이든간에 그것은 바람직하지만, 어떻게해야 하는가? 그것은 질문입니다. –

답변

0

이 이슈에 많은 시간을 할애하여 C에서 이미 존재하는 tcl/tk 응용 프로그램이나 인터프리터로 tcl 명령을 보내는 쉬운 방법이 없다는 것을 깨달았습니다.

다음 링크 동의한다 : 당신의 TCL과 C 프로세스를 고려하고 표준 IPC 메커니즘이 둘 사이에 정보를 전송하는 데 사용 될 수 있다는, 독립적 인 프로세스로 처리 할 수있는 경우 http://cpptk.sourceforge.net/doc.html

1

C 레벨에서 Tcl 인터프리터는 Tcl_Interp * 유형의 핸들로 표시됩니다 (이는 불투명 한 구조를 가리키는 것처럼 처리되어야 함). Tcl API를 사용하는 사람들은 일반적으로 interp이라는 이름을 부여 받았지만 그다지 중요하지는 않습니다. 당신은 그런 핸들을 한 후에는 사용

int returnCode = Tcl_Eval(interp, "puts \"Hello World\""); 

이 몇 가지 코드를 (우리가 상수 C 문자열 내부에 큰 따옴표를 넣고 있기 때문에 백 슬래시가) 실행합니다. 실행 코드가 성공적으로 끝나면 리턴 코드는 TCL_OK이고, 잘못된 코드가 있으면 TCL_ERROR이됩니다. OK 경우에는 Tcl_GetObjResult(interp)을 사용하여 결과 값을 얻습니다.이 경우 Tcl_GetString을 사용하여 인쇄 결과의 문자열 버전을 얻을 수 있습니다. 오류가 발생한 경우 동일한 기능 (예 : Tcl_GetObjResult, Tcl_GetString)을 사용하여 오류 메시지를 검색합니다. 가능한 다른 반환 코드가 있지만 대개는 볼 수 없습니다.

물론 puts의 결과는 성공시 빈 문자열입니다. 메시지는 인쇄되지 않고 리턴되지 않습니다.


어떻게 해석기 핸들을 얻습니까? 자, 코드가 Tcl과 어떻게 통합되어 있는지에 달려 있습니다. Tcl이 load 인 공유 라이브러리를 작성하는 경우 초기화 함수의 유일한 인수입니다. 반면에 Tcl을 임베드한다면 어떤 시점에 Tcl_CreateInterp()을 호출하고 새로 생성 된 인터프리터에 핸들을 반환합니다. 당신이하고있는 일은 보통 아주 명백합니다.

+0

나는이 두 가지 옵션을 알고 있습니다. C에서는 Tcl_CreateInterp()가 필요하고 tcl에서는 'load'가 필요합니다. 하지만 내 질문은 약간 다르다. 이미 특정 appname (내 경우 'x.y.123.3454')을 가진 tcl 인터프리터가있다. 이제이 특정 통역사에게 전화를 걸어 지침 (tcl 명령)을 보냅니 까? –

+0

나는 그것이 당신이 효과를 발휘할 것이라는 기대감을 가지고 있습니다. 진심으로 조언을 구하십시오. –

관련 문제