找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 18447|回复: 15
打印 上一主题 下一主题

ug 与 MFC 接口问题

[复制链接]
跳转到指定楼层
1
发表于 2006-1-17 15:12:27 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
我用以下代码编写ug 执行的动态库,为什么关闭对话框后,内存没有释放?(内存不释放的判据:不重启ug,重新编译会出现:”无法重写**.dll“的提示).各位有没遇到同样的问题?
extern "C" DllExport void ufusr( char *param, int *returnCode, int rlen )
{

    int errorCode=UF_initialize();
    if ( errorCode != 0 )
          return;  
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
        Assem_Tree_Dlg *PNMDlg;
        PNMDlg=        new  Assem_Tree_Dlg;
        PNMDlg->Create(IDD_DIALOG1,NULL);
        PNMDlg->ShowWindow(SW_SHOW);  

    if ( 0 == errorCode )
    {
        errorCode = UF_terminate();
    }
}
extern "C" void ufusr_cleanup(void)

{

}
extern "C"  int ufusr_ask_unload( void )

{

    return( UF_UNLOAD_UG_TERMINATE );

}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
16
发表于 2009-7-6 22:36:57 | 只看该作者
这个问题我也遇到了 不关闭UG 如法释放DLL,也就不能调试 ,
这样做起来很麻烦 高手指点下
15
发表于 2006-4-1 23:40:52 | 只看该作者
你的DLL被UG加载了,必须关闭UG才会释放掉DLL,楼主试试。

[ 本帖最后由 ddpo1982 于 2006-4-1 23:44 编辑 ]
14
发表于 2006-3-28 17:03:01 | 只看该作者
我也觉得他的UG没有关掉的条件下做的,
所以会出现这样的错误
13
发表于 2006-3-28 17:02:42 | 只看该作者
我也觉得他的UG没有关掉的条件下做的,
所以会出现这样的错误
12
发表于 2006-2-16 08:15:34 | 只看该作者
1.全局变量的内存,DLL生命终止后,就会被系统清除了。
是否也就是说,关闭ug之前全局变量是不会被自动清除的?另外动态库被加载后所占用的内存是否是固定的,如果我要关闭对话框的时候释放所有的变量、函数、类,那内存是否也会被释放出来?
11
发表于 2006-2-16 08:14:50 | 只看该作者
1.全局变量的内存,DLL生命终止后,就会被系统清除了。
是否也就是说,关闭ug之前全局变量是不会被自动清除的?另外动态库被加载后所占用的内存是否是固定的,如果我要关闭对话框的时候释放所有的变量、函数、类,那内存是否也会被释放出来?
10
发表于 2006-2-16 08:13:07 | 只看该作者
1.全局变量的内存,DLL生命终止后,就会被系统清除了。
是否也就是说,关闭ug全局变量是不会清除的?另外动态库被加载后所占用的内存是否是固定的,如果我要关闭对话框的时候释放所有的变量、函数、类,那内存是否也会被释放出来?
9
发表于 2006-2-5 09:22:49 | 只看该作者
return ( UF_UNLOAD_IMMEDIATELY );是正确的。UG是通过 UF_UNLOAD_IMMEDIATELY 来判断是不是该卸载这个DLL。你的 UF_UNLOAD_IMMENITRY,是什么意思?

你的问题:
1.全局变量的内存,DLL生命终止后,就会被系统清除了。
2.不会发生冲突的。虽然函数同名,但是在不同的模块内,各模块都有自己的ID的,系统能够辨识。
8
发表于 2006-2-4 20:30:55 | 只看该作者
首先祝大家新年快乐,财运亨通!
我试了很多方法,目前还不能解决。
按断点来调试,UG在执行UFUSR()以后就马上执行 ufusr_ask_unload( void ),如果
extern "C"  int ufusr_ask_unload( void )
{
    return( UF_UNLOAD_UG_TERMINATE );
}

则UG正常运行,动态庫也没有释放,如果
extern "C"  int ufusr_ask_unload( void )
{
    return( UF_UNLOAD_IMMENITRY);
}

则UG马上自动关闭,动态庫也得到了释放,这有点像UG/API外部命令模式啊!
但为什么用UISTYLER就没有这个问题?(应用UISTYLER时执行UFUSR()后马上释放动态庫)这是不是UG与MFC接口有缺陷?如果是那看来就不那么好解决了。我一直认为动态庫不释放,那么内存就没有释放,这也许有误了。现在请教各位一下:
1、如果动态庫不释放,MFC那么怎么释放.CPP文件内全局变量的内存?有比用delete一个一个释放好的办法吧?
2、如果动态庫不释放,也就是函数UFUSR还在运行中,假如我现在又要运行另一个UFUSR函数的动态庫那会不会有什么冲突?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-8-27 08:22 , Processed in 0.028168 second(s), 14 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

快速回复 返回顶部 返回列表