首页 文章

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

提问于
浏览
0

我正在使用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#代码向函数传递值时会出现此错误 .

Error statement:

System.Core.dll中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的异常但未在用户代码中处理附加信息:无法将null转换为“int”,因为它是不可为空的值类型如果有这个例外的处理程序,程序可以安全地继续 .

Can some one tell me what exactly the issue is?

码:

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

    我认为错误消息相对不言自明,您正在尝试将 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 ,你'll have to check the API you'重新使用 .

相关问题