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