从Python调用CAPL函数

时间:2016-04-26 13:57:56

标签: python capl

我正在研究CANalyzer,我找不到如何调用包含参数的CAPL函数。如果我将num放入functions_call.Call(num),则无效。

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

2 个答案:

答案 0 :(得分:5)

一段时间我遇到了类似的问题,一些谷歌搜索让我看到了Vector的以下应用笔记:

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

...结帐部分“2.7调用CAPL函数”。

总结一下,确保将你的CAPL函数的参数声明为“long”,.e.g:以下似乎对我有用:

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

为了完成,这就是我的python代码(如上例所示)的样子:

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)

答案 1 :(得分:-1)

如果我在python中的function1.Call(某些char变量)中传递char作为参数,则会抛出错误

  

文件   “C:\ Python27 \ LIB \站点包\ win32com \ gen_py \ 4CB02FC0-4F33-11D3-854D-00105A3E017Bx0x1x31.py”   第1668行,在Call中       ,第7页,第8页,第9页,第10页)文件“C:\ Python27 \ lib \ site-packages \ win32com \ client__init __。py”,第467行,   在 ApplyTypes 中       self。 oleobj .InvokeTypes(dispid,0,wFlags,retType,argTypes,* args),pywintypes.com_error:(-2147352567,'Exception occurred。',(0,None,None,None, 0,-2147352571),10)

的Python:

var = 'abc'

count = 0

while count < 10:

    if (is_running):

        function1.Call(var)

        count += 1

CAPL:

void function1(char var1[])

{

    //Code

}