需要将数据从CAPL写入C#代码并回读到CAPL脚本

时间:2018-04-30 09:27:55

标签: c# capl

我正在使用CANoe工具进行CAPL脚本编写。

我已将此链接提供给Vector:https://vector.com/portal/medien/cmc/application_notes/AN-IND-1-011_Using_CANoe_NET_API.pdf

提供的帮助

现在我在步骤或部分遇到问题:2.7调用CAPL函数。 没有语法错误,但我认为,代码无法从CAPL文件中检索函数,因为当我从C#代码向函数传递值时会出现此错误。

错误陈述:

  

类型的例外   ' Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'发生在   System.Core.dll但未在用户代码中处理

     

其他信息:无法将null转换为' int'因为它是一个   不可为空的值类型

     

如果存在此异常的处理程序,则可以安全地继续该程序。

有人可以告诉我究竟是什么问题吗?

代码:

public void Init()
{
 CANoe.Application myApp;
 myApp = new CANoe.Application();
 CANoe.Measurement mymeasure;
 mymeasure = (CANoe.Measurement)myApp.Measurement;
 myApp.Open(@"D:\Planter CAPl\CANoeCAPLdll.cfg", true, true);
 CANoe.OpenConfigurationResult ocresult = myApp.Configuration.OpenConfigurationResult;

 if (ocresult.result == 0)
   {
     CANoe.CAPL CANoeCAPL = (CANoe.CAPL)myApp.CAPL;
     CANoeCAPL.Compile(null);
     CANoe.CAPLFunction mydata;
     mydata = (CANoe.CAPLFunction)CANoeCAPL.GetFunction("Data");//CANoeCAPL.GetFunction("DataShare");

      mymeasure.Start();
      Thread.Sleep(2000);
      int Result = (int)mydata.Call(10,20,30);// Exeception error is coming at this point*

       if (mymeasure.Running)
         {
           mymeasure.Stop();
         }
   }
}

1 个答案:

答案 0 :(得分:0)

我认为错误消息相对不言自明,您尝试将null值转换为int类型。由于int是值类型,因此不能为null,因此会出现异常。

在第

int Result = (int)mydata.Call(10,20,30);

mydata.Call(10,20,30)返回的值为null。您应该检查该值是否为null并执行某些操作。

var myDataResult = mydata.Call(10,20,30);
if(myDataResult == null)
   // do something
else
   int result = (int)myDataResult;

至于为什么调用Call方法会返回null,您必须检查您正在使用的API。