我会努力弄清楚。
我想从命令行调用带有某些参数的proc,但不知道该proc需要的参数数量。
我实际上想在我的tcl脚本中从dll调用一个函数。该函数只是调用其他函数的接口,因此传递给该函数的第一个参数实际上是最终要使用的函数。
tcl myscript.tcl dll_final_function arg1 arg2 arg3
#DLL already loaded
#DLL function call
#It doesn't work but shows the "way" I want to do it
dll_interface $argv
#It works, but not in the "way" I want because I want a generic solution
dll_interface [lindex $argv 0] [lindex $argv 1] [lindex $argv 2] [lindex $argv 3]
编辑:dll_interface $ argv或dll_interface {*} $ argv从dll函数返回“无效方法”错误。似乎dll函数将$ argv作为整个字符串接收。
我无法更改dll的工作方式,希望我对问题的描述很清楚。
非常感谢您。
答案 0 :(得分:0)
在当前所有受支持的Tcl版本中,您可以使用扩展名“ operator”(从技术上讲它不是运算符,但可以假装是)将列表转换成多个单词,每个列表项一个。由于argv
已经是列表,因此您的命令将变为:
dll_interface {*}$argv
就这么简单。
在Tcl的较旧版本中,您可以改为:
eval [linsert $argv 0 dll_interface]
但这真的不是显而易见的! (eval dll_interface $argv
也可以使用,但是还有其他更细微的问题,随着您进入更复杂的情况,这些问题会逐渐出现。)