2014-01-13 4 views
2

TCL 스크립트를 실행할 수있는 C 응용 프로그램과 C로 구현되고 Tcl_CreateObjCommand로 등록 된 많은 사용자 지정 TCL 명령이 있습니다. 명령을 구현할 때 내 명령을 호출 한 TCL 스크립트의 파일 이름을 찾고 싶습니다. 나는. "info script"과 유사하지만 C에서 호출되었습니다 (전체 경로가 필요하지 않고 파일 이름만으로 충분합니다). 내 명령에서 가지고있는 유일한 매개 변수는C 처리기에서 TCL 스크립트 이름을 얻는 방법

Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] 

clientData입니다.

그래서 Tcl_Interp*을 전달하고 TCL 스크립트의 파일 이름을 얻을 수있는 C 함수가 있습니까? 또는 존재하지 않으면 TCL 명령의 구현에서 Tcl_Eval* 함수를 호출하는 것이 안전하며 간접적으로 재귀 호출이됩니다.

답변

3

정보를 얻기위한 API는 다음과 같습니다 종종 모든 것을 요구되지 않는

if (Tcl_Eval(interp, "info script") == TCL_OK) { 
    const char *scriptFile = Tcl_GetString(Tcl_GetObjResult(interp)); 
    // Will be OK until you evaluate another script; copy if necessary 
    // ... 
} else { 
    // Something bad happened; unlikely for just “info script” in a normal interp 
} 

, 실행중인 스크립트 이름을 얻기를위한 공식적인 C의 API가 없습니다. 생성 된 문자열은 source 명령 (또는 Tcl_EvalFile() 또는 그 관계)에 전달 된 것이됩니다. 일반적으로

, 그래, 당신이 if 또는 while 또는 for과 같은 명령이 구현 생각합니까 C. 구현은 Tcl 명령의 Tcl_Eval를 호출하는 것이 안전?

+0

와우 너무 빨리! 대단히 고마워. 내가 필요한거야. – Radagast