Tcl에서 작업 중입니다. swig를 사용하여 C로 TCL 명령을 확장하십시오. 이제 C에서 확장 명령을 사용하여 tcl 절차를 콜백 할 수 있습니다. 그러나 나는 그것에 대해 모른다.C에서 콜백 tcl 프로 시저를 호출하는 방법
도와주세요.
먼저 swig에서 mrecv를 호출하는 디스패처 기능을 구현합니다. 그리고 내 tcl 스크립트에서. mrecv에게 메시지 수신을 요청합니다. 그래서, 메시지가 도착했을 때, 나는 tcl이 mrecv에 의해 통지 될 수 있기를 바란다. 그래서 c에서 콜백 tcl 프로 시저를 호출하는 방법을 찾아야합니다.
그리고 내 코드는 breifly입니다
W16 mrecv(int timeout) {
W16 res;
Msg_t *msg = NULL;
APP_EVENT_T eventList[255];
int listLength = 255;
while (1) {
readAgain = 0;
msg = malloc(sizeof(Msg_t));
if (!msg) {
return RETURN_ERR;
}
memset(msg, 0, sizeof(Msg_t));
res = MsgRecvEvent(msg, eventList, &listLength, timeout);
if (res == RETURN_OK) {
msgDispatcher(msg);
}
free(msg);
}
return res;
}
void msgDispather(void *msg) {
/*notify tcl*/
}
하고 내 TCL 스크립트입니다. 나는 mrecv 명령을 호출한다. TCL 스크립트 :
res [ mrecv 3000 ]
나는 TCL을 통지하는 방법을 알아야합니다.
아래는 내 테스트 데모입니다.
int testCallback (char * str) {
Tcl_Interp *interp;
interp=Tcl_CreateInterp();
Tcl_Eval(interp,str);
return 0;
}
testCallback()은 tcl에서 호출 할 확장 cmd입니다. str은 tcl의 프로 시저 이름입니다.
질문을 좀 더 구체적으로 작성할 수 있습니까? StackOverflow가 현재로서는 너무 광범위합니다. 지금까지 시도한 것은 무엇이고 어디에서 붙어 있습니까? – starsplusplus
당신은 _ 너무 자주 인터프리터를 만들고 싶지 않습니다. (그들은 중량급입니다.) 가비지 수집이 아닙니다. 실제로 콜백을 처리하기 전에 사용자가 설정을 할 수 있도록 기존의 것을 사용하고 싶을 것입니다 ... –