NX Open Api程序能够在两种不同环境下运行。
Internal环境下的程序只能在NX界面环境下运行。在运行这种模式下的程序时,通常都会加载到NX的运行空间中。编译Internal环境下的程序生成动态链接库(dll)文件,通过NX加载dll文件功能或者通过Menuscript加载到NX界面中执行。入口函数是ufusr或者ufusa。
External环境调用NX Open API库中的函数生成可执行文件(EXE),可以脱离NX的界面环境直接运行。运行的结果不能直接在NX界面中显示。但可以将结果保存成部件或者装配体文件,再通过NX打开。入口函数是main。
使用Visual Stadio 2015,将NX 9.0的Open API库复制到相关的文件夹内(可参考上一篇随笔),建立NX Open Wizard项目。编译成功,执行时出现错误:“无法启动此程序,因为计算机中丢失libufun.dll。尝试重新安装该程序以解决此问题。”
从网上找到相关解释以及解决办法,原文如下:
在尝试UG的external模式时,遇到这个问题
具体情况就是:
对
$(UGII_BASE_DIR)\ugopen
libufun.lib libugopenint.lib
都做了正确的设置
而且也完全编译成功,但是这个编译成功的exe
运行时却弹出警告窗口,提示:“没有找到libufun.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题”
这是为什么呢?
在外部模式下,程序之所以不能运行,是因为缺dll 支持。所以光加了libufun.lib libugopenint.lib没有用,WINDOWS中,lib只是对dll中的接口函数的声明,像目录一样
外部开发,应该只能在UGII下可以运行,要么就找到libufun.dll和libugopenint.dll所引用的每一个库,也就是说把整个UGII中的文件夹打个包到exe所在的debug目录下。
目前了解到的解决办法是:
1)直接将生成的exe文件拷贝到UGII目录下,双击运行,试过了,可以正常运行;
2)将整个UGII中的文件夹打个包到exe目录(没试过)
这里有很好的讨论结果
http://bbs.icax.org/viewthread.php?tid=145192&extra=&page=1
----------------------------------------------------------------------------------------
update:2011-3-28 17:02:22
其实是少设置了环境变量的缘故
我的电脑---右键属性---高级---环境变量---系统变量---Path
添加UGII的路径,比如:D:\Program Files\UGS\NX 6.0\UGII
设置之后,生成的exe便可成功运行,而不会再提示找不到libufun.dll
之前上面所述其实道理一样,只是没有从本质上解决问题,通过设置环境变量之后便可不用将生成的exe文件复制到UGII目录下了。
----------------------------------------------------------------------------------------
update:2012-3-12 16:29:39
设置完Path后需要重启电脑。
设置完环境变量Path后,再次运行,程序直接崩溃。
尝试很多办法后,最终发现是NX版本问题。之前做内部模式开发时使用的Visual Stadio 2010 + NX 9.0,安装VS2010后并进行编译,程序能够正确运行。
之后换用NX 10.0,使用VS2015编译,也没有出现该问题。