epwt 发表于 2011-5-17 17:02:49

[求助]关于debug进去与直接ap加载进去,运行结果不一样的问题

最近遇到一个问题,
就是我在选择一个自定义实体的时候,
debug进系统,如果没选中就会return,没有问题。
但是我如果直接启动CAD,加载arx程序,
如果没选中实体,直接按回车,
系统不return,而是直接报错了。

我试着用MessageBox,想阻塞命令窗口,可是不行。

是否与On_kInitAppMsg(void *pkt)、On_kUnloadAppMsg (void *pkt)
这两个函数有关系?
如果有,应该怎样配置,让dubug的运行结果与直接加载arx结果一样?

是否直接加载arx与debug进系统,初始化的顺序不一样?
还望各位大侠指点。
多谢!

bluelightcsy 发表于 2011-5-18 17:03:48

说的不明白。。。。你直接加载是Release版本?正常情况,调试不调试是相同的结果!你直接上代码吧,不过这几天有点忙,不知道下次什么时候会上

epwt 发表于 2011-5-19 14:11:21

本帖最后由 epwt 于 2011-5-19 14:13 编辑

resbuf *filter;
filter = acutBuildList(8, "WALL", 0);
if(acedSSGet(NULL, NULL, NULL, filter, ss) != RTNORM)
{
    acutRelRb(filter);
    return;
}
acutRelRb(filter);
acedSSLength(ss, &len);
acedSSName(ss, 0, ent);
acdbGetObjectId(objId, ent);
acedSSFree(ent);

正常情况下,如果我选中的不是WALL图层的实体,
直接按回车,应该就走到if里直接return的,
我debug进去,的确是这样。

但是我直接打开cad,加载arx程序,
执行同样的操作,程序却报错了。

我严格检查了在执行这个操作之前的操作,
看是否前面的操作导致这个操作失灵。

于是我怀疑,是不是debug进去,加载的顺序和
直接打开cad加载的顺序有些不一样,导致这个问题的出现。

当然,更可能的是某些内存没回收,但是这个还真的很难找啊。

还望多指教。

epwt 发表于 2011-5-19 17:33:44

问题已经解决了,
我在选择WALL图层前,
把其它不相关图层都关闭了,
选择完毕,执行相应操作后,
再把关闭的图层打开。
这样就除非用户点取消,
不然是不会选错的。

问题虽然解决了,
但还是回问回去,
从编译器运行程序和直接打开cad加载程序,
初始化的顺序是否不同?
如果不同,那他们初始化的顺序分别是什么样的呢?

还望大家多指点。

bluelightcsy 发表于 2011-5-21 20:19:45

那个可能叫“从调试器启动程序?”你指的是这个吧?通常来说,如果同是Debug版本的程序,理论上来讲,是一样的!不太清楚,你这里所谓的“初始化”的顺序到底是指什么东西。Debug版和Release版,一个区别是Debug版通常会做一些默认的初始化,如你定义一个int i;在调试版中,它的值是0,而发布版,这就可能是一个随机数!

epwt 发表于 2011-5-23 11:21:11

哦,这样子呀。
看来问题是处在初始化了。
多谢!
页: [1]
查看完整版本: [求助]关于debug进去与直接ap加载进去,运行结果不一样的问题