【问题标题】:Need to Write Data from CAPL to C# code and read back to CAPL script需要将数据从 CAPL 写入 C# 代码并读回 CAPL 脚本
【发布时间】:2018-04-30 09:27:54
【问题描述】:

我正在使用 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();
         }
   }
}

【问题讨论】:

    标签: c# capl


    【解决方案1】:

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

    排队

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-08
      • 2018-03-31
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      相关资源
      最近更新 更多