我试图声明一条消息,然后在 on message 事件中使用消息名称,但是我得到了
<tbody>
<tr>
<td class="S_line1">
<a bpfilter="page_frame" class="t_link S_txt1" href="//xx.com/p/1003061291477752/follow?from=page_100306&wvr=6&mod=headfollow#place">
<strong class="W_f12">170</strong>
<span class="S_txt2">fans</span>
</a>
</td>
</tr>
</tbody>
错误
我的代码:
Expecting message name or identifier
我知道我可以在variables
{
message CAN1.foo bar;
}
on message bar //got the error here
{
//do stuff
}
事件中将bar
替换为CAN1.foo
,但是该消息的位置可以根据运行capl代码的项目而改变。所以我想使其尽可能“通用”,所以我只能在切换项目时更改on message
中的部分
答案 0 :(得分:1)
不可能有一个“动态” on message
处理程序。
可以通过使用通用的on message *
处理程序并比较消息名称来解决您的用例。
类似这样的东西:
variables
{
char messageName[256] = "foo";
}
on message *
{
dword context = 0x00010000;
char buffer[256];
getMessageName(this.ID, context | this.CAN, buffer, elcount(buffer));
if(strncmp(buffer, messageName, strlen(buffer) == 0)
{
// do stuff
}
}
您必须参考文档getMessageName
的第二个参数的含义,而且我不确定getMessageName
返回foo
还是CAN1.foo
答案 1 :(得分:0)
鉴于动态消息名称不是一种选择,请考虑采用另一种设计。
如果//do stuff
是一个函数,您可以重复使用,请在您的主CAPL脚本中声明它,或者将其包含在doStuff.cin
中。
然后,根据您的项目,包括一个由prjMessageEventHandler.cin
组成的on message yourProjectDependendMessages
(您也可以声明消息列表):
on message 1,2,3,4
{
// call to doStuff.cin suitable function
}
由于您的prjMessageEventHandler.cin
很简单,因此可以通过xml以编程方式构建它。
像这样,您在CAPL测试脚本中唯一需要更改的就是您要包含的prjMessageEventHandler.cin
。