运行 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)