运行 CANoe 中带有 comtypes 的 CAPL 函数出错
Running CAPL function in CANoe with comtypes gives an error
现在我正在尝试使用 python comtypes 包在 CANoe COM API 中调用 CAPL 函数。
为此,我创建了以下 python 小程序:
from comtypes.client import CreateObject
c=CreateObject("CANoe.Application")
squareFunction=c.CAPL.GetFunction("square")
res=squareFunction.Call(5)
print(res==25)
这应该调用我的短 CAPL 函数:
int square(int x) {
return x*x;
}
不幸的是,程序在 c.CAPL.GetFunction("square")
中产生一个异常,以防在 CANoe 中模拟 运行。
COMError: (-2147418113, 'Critical Error', (None, None, None, 0, None))
如果停止CANoe中的仿真,没有报错,但是函数的调用会产生None
.
有谁知道,这是怎么回事?
首先,确保您的函数是在测量设置的 CAPL 块中定义的,而不是在模拟设置中。
Vector link 的应用说明 CANalyzer/CANoe 作为 COM 服务器 在第 15 页指出
The assignment of a CAPL function to a variable can only be done in
the OnInit event handler of the Measurement object.
即您的 squareFunction
变量必须在 OnInit 事件期间初始化。类似这样:
def OnInit():
self.squareFunction = c.CAPL.GetFunction("square")
c.Measurement.OnInit += CANoe._IMeasurementEvents_OnInitEventHandler(self.OnInit)
通过这个OnInit
将在测量初始化期间执行,您可以稍后执行self.squareFunction.Call(5)
现在我正在尝试使用 python comtypes 包在 CANoe COM API 中调用 CAPL 函数。
为此,我创建了以下 python 小程序:
from comtypes.client import CreateObject
c=CreateObject("CANoe.Application")
squareFunction=c.CAPL.GetFunction("square")
res=squareFunction.Call(5)
print(res==25)
这应该调用我的短 CAPL 函数:
int square(int x) {
return x*x;
}
不幸的是,程序在 c.CAPL.GetFunction("square")
中产生一个异常,以防在 CANoe 中模拟 运行。
COMError: (-2147418113, 'Critical Error', (None, None, None, 0, None))
如果停止CANoe中的仿真,没有报错,但是函数的调用会产生None
.
有谁知道,这是怎么回事?
首先,确保您的函数是在测量设置的 CAPL 块中定义的,而不是在模拟设置中。
Vector link 的应用说明 CANalyzer/CANoe 作为 COM 服务器 在第 15 页指出
The assignment of a CAPL function to a variable can only be done in the OnInit event handler of the Measurement object.
即您的 squareFunction
变量必须在 OnInit 事件期间初始化。类似这样:
def OnInit():
self.squareFunction = c.CAPL.GetFunction("square")
c.Measurement.OnInit += CANoe._IMeasurementEvents_OnInitEventHandler(self.OnInit)
通过这个OnInit
将在测量初始化期间执行,您可以稍后执行self.squareFunction.Call(5)