lERICl 发表于 2014-12-19 10:55:50

[求教]ObjectARX开发出的可停靠窗口停靠CAD边缘问题

本帖最后由 lERICl 于 2014-12-25 09:51 编辑

尊敬的社区版主及各位会员,本人初学ObjectArx开发,按照张帆老师教材,开发出一个可停靠窗体。然而有一个问题,那就是当这个窗体停靠在CAD左右边缘时,一切功能虽然正常,可是当关闭CAD时,使得CAD崩溃。弹出“Unhandled Access Violation Reading 0x63c8 Exception at 499ac3h”对话框。然而当这个窗体脱离边缘或者停靠在CAD上边缘时,关闭不发生崩溃。这现象真是奇怪,搞不懂什么原因造成的。开发环境:Objectarx2004+AutoCAD2004+vs.NET2002,win7 x86

特此来社区请教问题原因,恳请版主及各位会员指教。感谢。

菡萏 发表于 2014-12-19 16:00:22

退出时没有销毁对话框对象吧!

lERICl 发表于 2014-12-19 16:48:46

菡萏 发表于 2014-12-19 16:00 static/image/common/back.gif
退出时没有销毁对话框对象吧!

可能是这个原因,只是不知在哪里响应AutoCAD关闭时,销毁这个对象。在virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt)里面只能处理手动卸载ARX程序之后的清理,但是无法解决AutoCAD关闭后的清理,貌似关闭cad是自动处理的。因为是新手,所以不知从何下手添加。

三水合一 发表于 2014-12-21 09:08:20

//在应用程序卸载时需要做的动作
void OnUnloadApp()
{
        if(XXXDlg::s_pDlg != NULL)
        {
                XXXDlg::s_pDlg->DestroyWindow();
        }

    acedRegCmds->removeGroup(_T("..."));
}

extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
{
    switch (msg)
        {
          ...
    case AcRx::kUnloadAppMsg:
      OnUnloadApp();
      InitModule(_hdllInstance, DLL_PROCESS_DETACH, NULL);
      break;
    }
    return AcRx::kRetOK;
}

这样去销毁对话框.CAD退出时,应该不会崩溃了,你试试。

lERICl 发表于 2014-12-23 10:43:20

本帖最后由 lERICl 于 2014-12-23 10:49 编辑

三水合一 发表于 2014-12-21 09:08 static/image/common/back.gif
//在应用程序卸载时需要做的动作
void OnUnloadApp()
{

首先,谢谢你的建议。这些天又尝试了一下,感觉好像是把这个窗口停靠在CAD边缘,关闭CAD时,可能由于破坏了原来的窗口布局而导致的崩溃。因为尝试过各种销毁对象和窗口的手段均无效。是不是窗口停靠在CAD边缘关闭CAD时,CAD内部要修改什么配置文件,或者是修改注册表什么的,然而却无法保存它现有位置,因此才出现崩溃现象。这只是我的猜测,希望懂得的大神指点一二。
另外,当把停靠在边缘的窗口拖到中间,即脱离边缘,关闭CAD就不会崩溃,故有此猜测。

suker23 发表于 2015-1-20 23:12:23

在arx2008中有个实例CustPalette,建议你看下

lERICl 发表于 2015-1-26 17:16:36

suker23 发表于 2015-1-20 23:12 static/image/common/back.gif
在arx2008中有个实例CustPalette,建议你看下

感谢你的提醒,经过各种尝试(能力有限),目测只有这个合适了。CAdUiPaletteSet与CAdUiPalette,这个是不会崩溃的。

springwillow 发表于 2016-5-8 12:32:59

我也遇到了这个问题,R16就是有这个问题,以上版本没有这个问题。有没有办法解决啊?
页: [1]
查看完整版本: [求教]ObjectARX开发出的可停靠窗口停靠CAD边缘问题