点击查看详细介绍

ug 与 MFC 接口问题

boliang99 19年前 6622 9

购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008  QQ号:85585969  


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

0

最新回复 (9)
  • boliang99 19年前
    1

    注:我已在MFC对话框关闭时释放如下:
    void Assem_Tree_Dlg:ostNcDestroy()
    {

  • zhjb113 19年前
    2

    1 建议你在ufusr_cleanup(void)中释放内存
    2 内存没有释放和(内存不释放的判据:不重启ug,重新编译会出现:”无法重写**.dll“的提示).没有关系。出现这种情况是应用你让你的程序一直没有卸载,你可以看看参数UF_UNLOAD_UG_TERMINATE 的说明。

  • boliang99 19年前
    3

    谢谢zhjb113的回复。但我还是试不出来。
    前面没交待,我输出的动态庫是在menuscript调用的,即用菜单来调用,我不知道这会对卸载动态庫有没有影响?
    我想,我所说的内存释放应该是动态庫没有unload,因此动态库内的全局变量就无法删除。如果能在void Assem_Tree_DlgstNcDestroy() 函数内FreeLibrary(??);应该就没问题了,可是我没办法求得FreeLibrary(什么?);
    zhjb113所说的两点似乎都要关闭ug才后才执行啊?因为我只能用 return( UF_UNLOAD_UG_TERMINATE );而不能用 return ( UF_UNLOAD_IMMEDIATELY );(那样ug就会马上关闭)

  • zhjb113 19年前
    4

    你的做法没有错误,因为你使用的是UF_UNLOAD_UG_TERMINATE。
    你必须关闭UG才能重新编译也是对的。这个不是判断你没有释放内存的依据

  • along533 19年前
    5

    一个很简单的方法,就是在ufusr函数中什么代码都不要写:像下面这样
    extern

  • 深夜摔键盘 19年前
    6

    楼上兄弟的方法不能解决什么问题,多想想上面兄弟的正解吧。

  • boliang99 19年前
    7

    首先祝大家新年快乐,财运亨通!
    我试了很多方法,目前还不能解决。
    按断点来调试,UG在执行UFUSR()以后就马上执行 ufusr_ask_unload( void ),如果
    extern

  • 深夜摔键盘 19年前
    8

    return ( UF_UNLOAD_IMMEDIATELY );是正确的。UG是通过 UF_UNLOAD_IMMEDIATELY 来判断是不是该卸载这个DLL。你的 UF_UNLOAD_IMMENITRY,是什么意思?

    你的问题:
    1.全局变量的内存,DLL生命终止后,就会被系统清除了。
    2.不会发生冲突的。虽然函数同名,但是在不同的模块内,各模块都有自己的ID的,系统能够辨识。

  • boliang99 19年前
    9

    1.全局变量的内存,DLL生命终止后,就会被系统清除了。
    是否也就是说,关闭ug全局变量是不会清除的?另外动态库被加载后所占用的内存是否是固定的,如果我要关闭对话框的时候释放所有的变量、函数、类,那内存是否也会被释放出来?

请登录后发表新帖