您现在所在的是:

嵌入式系统

回帖:1个,阅读:1146 [上一页] [1] [下一页]
1137
xingsharp
文章数:119
年度积分:48
历史总积分:1137
注册时间:2005/3/2
发站内信
08年优秀博客奖
发表于:2009/4/21 11:28:15
#0楼

cvi的uir函数尸体导致的运时时错误(qzm原创)

  一大早,写好今天的工作计划, 打开昨天下班时还debug ok的cvi项目,谁知,出现了一个run-time error:
图
断点停在如下图所示的位置.
图
从第一个错误提示中我们可以看出以下有用的信息:
(1) 这是个运行时错误,不是编译错误,这种错误比编译错误难排查.
(2) cvi运行时错误检测机制找到错误的语句的位置(但通常来说,运行时错误,的发生,并不是断点停留的位置,因为,cvi在函数中也有它的相应的检测代码,当它在函数中检测到错误或不能满足它的运行环境时,也会报错.)
(3) 关键字分析:
a) the callback function - 说明有可能和 回调函数有关
b) openclient_managerwin - 看起来象是个函数,因为,用了谓语(我写的,但久了,我都忘了,呵呵).
c) specified in the uir file - 该函数被定义在 与uir相关的模块中
d) if you are using an external compiler, you must include the uir callbacks object or source file in the executable or dll -
这是cvi编译器自已分析后给出可能的错误原因,其实是个误导。

   
图

从上图的标识中,知道,cvi 用panel_combtn_client_manager 和 openclient_managerwin 回调函数产生了关联(应是一对多的关联,学过mfc就能很好地理解 cvi的工作原理和机制,因为mfc比cvi难了1个数量级)。
(4)错误的原因和为什么会报错。
从代码中我们能看到只不过是在与uir相关联的模块中声明了“panel_combtn_client_manager ”句柄(在xx.h) 和定义了一个回调函数体(xx.c)。难道cvi放他们在这里暂时不用不时吗?为什么非要报错呢?
原因就在于,cvi在我们不可见的地方管理着以 uir中的控件(如按键)、 句柄、回调函数之间的关系,当我们一按按键,就能进入相应的回调函数的机制,但当把控件kill掉后,在运行程序时,cvi由于不能找到满足“回调机制”的存在于uir中的控件(在代码中是以常数指代的),所以报错。
图
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=85154&Name=zjcsharp
54
m18829075549
文章数:1
年度积分:54
历史总积分:54
注册时间:2024/10/12
发站内信
发表于:2024/10/12 11:20:03
#1楼
请问博主,那应该怎么解决呢?我也遇到了这样的问题

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003