iCAx开思工具箱

标题: 一个非常有趣的问题,请mizzle、键盘兄弟和其他人来看一看 [打印本页]

作者: skywood    时间: 2004-11-15 23:06
标题: 一个非常有趣的问题,请mizzle、键盘兄弟和其他人来看一看
UG二次开发,实际上是通过编写和显式加载dll,来扩展UG的功能。
根据情况的不同,这个dll的编写可能用到 UG OPEN/API、WIN32 API 、MFC等。
  
今天我突发奇想:每次调试dll都要先启动UG,再由UG调用dll,那不是太花时间了!而且我的计算机配置也不太好(P4 1.5G,256MB,WinXP,UG NX),每次听到硬盘嘎嘎地响,还担心它哪天会玩完。最要命的是,从User Function  载入dll后,并不能从UG中直接卸载dll;还要先关闭UG,再启动UG,才可以调试修改过的、新的dll。这编程的时间,倒还不如调试时启动、关闭UG费的时间更多!
  
既然我现在编写的程序中,并没有用到与UG中建模、草图等模块密切相关的UG OPEN/API,而主要用的是WIN32 API、MFC,
那么为什么我不做一个非常小的exe可执行文件,调试时就用这个可执行文件来动态装载、动态卸载dll文件?
这样,每次修改了dll源代码,就无需启动巨大的UG NX,而只要调用一个小exe程序,调试岂不是快得多?而且这个exe文件只要启动一次,只需要通过动态装载、动态卸载,就可以无限多次测试更新过的dll。
  
当然,如果编写的dll用到了与UG密切相关的模块,必须在UG环境下运行,也有变通的办法。
那就是:利用来dll来装载、卸载dll!
  
(今天我要回去了,明天再来写)
作者: 深夜摔键盘    时间: 2004-11-16 09:43
是可以的,不是很难。以前也想过,但习惯了,也就不想了。呵呵。趁着这个话题,可以先讨论一下有没有意义。
  
和UG无关的东西,我是先做EXE,通过后,再变成DLL格式的,只要遵守DLL的规范,不会有问题。如果做了这么一个虚拟UG,那么就可以直接写DLL,这个不错。关于程序中涉及图形显示的,可以用OPENGL来写个模块处理一些简单的显示。这样搞着搞着,就怕最后会出来自己的UG-------做个梦。
  
UG运行时不能从UG中直接卸载的问题,我是用UTD来装DLL,只要不是sta入口的就可以。
作者: skywood    时间: 2004-11-16 10:10
键盘兄弟的这一段,看不懂:
"UG运行时不能从UG中直接卸载的问题,我是用UTD来装DLL,只要不是sta入口的就可以。"
  
UTD是个什么东西?
作者: KangKang    时间: 2004-11-17 08:59
有同感!关注中!
作者: Tyrael    时间: 2004-11-18 10:21
“从User Function 载入dll后,并不能从UG中直接卸载dll;还要先关闭UG,再启动UG,才可以调试修改过的、新的dll。”
  
这个不是吧,用ufusr入口,在ufusr_ask_unload (void)里返回UF_UNLOAD_IMMEDIATELY,这样dll执行完后就会卸载了
作者: skywood    时间: 2004-11-18 22:51
Tyrael 的意思,是不是指要在ufusr()中调用ufusr_ask_unload ()函数?
   
  
作者: skywood    时间: 2004-11-18 22:54
我现在已经做好了一个“调试器”,功能简单,但还可以用。
  
这下省事多了!
作者: mizzle    时间: 2004-11-19 08:03
怎么做的,关注中
作者: goodluckwu    时间: 2004-11-20 15:01
如果不需要直接的人机交互,你完全可以使用外部模式来解决你说的问题。它就是一个.exe文件。
作者: zhjb113    时间: 2004-11-20 15:38
我的与UG无关的部分是做成一个COM组件,这样以后还可以应用在其他CAD平台上,与CAD相关的部分重新改写一下就可以了
作者: skywood    时间: 2004-11-24 21:36
mizzle wrote:
怎么做的,关注中

  
其实也很简单。核心内容是怎样使用自己编写的.exe文件去显式加载.dll。
  
主要是要另外做一个.exe文件。先启动该.exe文件,并设定:当按下该.exe文件对话框中的某个按钮(或菜单项)时,显式调用动态连接库,并且调用.dll中的对话框构造函数。




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3