如何在TCL中获取C exe文件的返回值(Windows)

时间:2017-01-17 19:08:46

标签: tcl exec

我一直在尝试使用catch和exec来运行一个在最后返回int的已编译C程序,但到目前为止,我只能得到返回值0和1,0,当c返回时程序返回0和1其他任何东西。 有没有办法从C程序中获得任何返回值(例如5)?

1 个答案:

答案 0 :(得分:1)

是。使用catch命令的第三个参数来检索返回选项:

 set returnvalue 0
 if { [catch { exec ./myprogram } result retopts] } {
   lassign [dict get $retopts -errorcode] class pid retcode
   set returnvalue 1
   if { $class eq "CHILDSTATUS" } {
     set returnvalue $retcode
   }
 }

也可以使用try / on error块:

try {
  exec ./myprogram
  set returnvalue 0
} on error {result retopts} {
  lassign [dict get $retopts -errorcode] class pid retcode
  set returnvalue 1
  if { $class eq "CHILDSTATUS" } {
    set returnvalue $retcode
  }
}

修改: try / trap示例:

set returnvalue 1
try {
  exec ./myprogram
  set returnvalue 0
} trap {CHILDSTATUS} {result retopts} {
  lassign [dict get $retopts -errorcode] class pid retcode
  set returnvalue $retcode
}

参考文献:catch errorCode try