Llama a la función CAPL desde Python

Estoy trabajando en CANalyzer y no encuentro cómo llamar a una función CAPL que contiene un parámetro. Si pongo num en functions_call.Call(num) no funciona.

 def call(num): print 'calling from CAN' x=int(num) functions_call.Call() return 1 

Me encontré con un problema similar hace un tiempo y un poco de Google me llevó a la siguiente nota de aplicación de Vector:

http://vector.com/portal/medien/cmc/application_notes/AN-AND-1-117_CANoe_CANalyzer_as_a_COM_Server.pdf

… verifique la sección “2.7 Llamando funciones CAPL”.

Para resumir, asegúrate de declarar los parámetros de tu función CAPL como “largos”, .eg: lo siguiente parece funcionar para mí:

 void function1(long l) { write("function1() called with %d!", l); } 

Para completar, así es como se ve mi código de Python (para el ejemplo anterior):

 from win32com import client import pythoncom import time function1 = None canoe_app = None is_running = False class EventHandler: def OnInit(self): global canoe_app global function1 function1 = canoe_app.CAPL.GetFunction('function1') def OnStart(self): global is_running is_running = True canoe_app = client.Dispatch('CANoe.Application') measurement = canoe_app.Measurement measurement_events = client.WithEvents(measurement, EventHandler) measurement.Start() # The following loop takes care of any pending events and, once, the Measurement # starts, it will call the CAPL function "function1" 10 times and then exit! count = 0 while count < 10: if (is_running): function1.Call(count) count += 1 pythoncom.PumpWaitingMessages() time.sleep(1) 

Si paso char como argumento en function1.Call (alguna variable char) en python, arroja un error como

Archivo “C: \ Python27 \ lib \ site-packages \ win32com \ gen_py \ 4CB02FC0-4F33-11D3-854D-00105A3E017Bx0x1x31.py”, línea 1668, en Call, p7, p8, p9, p10) Archivo “C: \ Python27 \ lib \ site-packages \ win32com \ client__init __. py “, línea 467, en ApplyTypes self. oleobj .InvokeTypes (dispid, 0, wFlags, retType, argTypes, * args), pywintypes.com_error: (-2147352567, ‘Exception vegetales.’, (0, None, None, None, 0, -2147352571), 10)

Pitón:

 var = 'abc' count = 0 while count < 10: if (is_running): function1.Call(var) count += 1 CAPL: void function1(char var1[]) { //Code }