绕过不存在的功能

时间:2017-01-13 15:30:40

标签: dm-script

如何绕过DM中不存在的功能 这样主代码仍会运行?尝试/捕获似乎不起作用,e..g

image doSomething(number a,number b)
{
    try 
    {
    whateverfunction(a,b)
    }
    catch 
    {
    continue
    }
}


number a,b
doSomething(a,b)

同样条件不会起作用,例如..

image doSomething(number a,number b)
{

    if(doesfunctionexist("whateverfunction"))
    {
    whateverfunction(a,b)
    }
}


number a,b
doSomething(a,b)

提前感谢!

2 个答案:

答案 0 :(得分:0)

由于“未知”命令被脚本解释器捕获,因此没有简单的方法可以做到这一点。但是,您可以使用ExecuteScriptCommand()构建变通方法。

e-book中有一个示例教程,但简而言之,您希望执行以下操作:

String scriptCallStr = "beep();\n"
scriptCallStr = "MyUnsaveFunctionCall();\n"

number exitVal 
Try { exitVal = ExecuteScriptString(scriptCallStr ); }
Catch { exitVal = -1; break; }

if ( -1 == exitVal )
{
    OKDialog("Sorry, couldn't do:\n" + scriptCallStr )
}
else
{
    OKDialog( "All worked. Exit value: " + exitVal )
}

对于简单的命令,如果您的任务只是“验证”脚本可以运行,那么它的工作非常简单。

当你需要传递参数时,它会变得笨拙。但即使这样,也有办法这样做。 ('outer'脚本可以创建一个对象并传递每个字符串的对象ID。同样,'inner'脚本可以执行相同的操作并将脚本对象ID作为exit-value返回。)

注意:您当然也可以将doesfunctionexist放在测试脚本中,如果您只想进行“安全测试”,但实际上并不想执行该命令。

答案 1 :(得分:0)

根据您的需要,可能还有另一种解决方案:库中的包装函数。如果你想在不同的PC上运行相同的脚本,其中一些具有功能 - 很可能是一些显微镜 - 而其他人没有,那么这可能很有用。 您可以使主脚本使用包装器方法,然后将不同版本的包装器方法脚本脚本安装为库。

void My_SpecialFunction( )
{
   SpecialFunction()    // use this line on PCs which have the SpecialFunction()
   DoNothing()          // use alternative line on PCs which don't have the SpecialFunction()
}

My_SpecialFunction( )

我过去曾经使用过这个功能(-stage movement-)在不同的机器上需要不同的命令。