今天花一些时间把UG二次开发中较常遇到两个问题做一个简单的说明以供参考:

  • UG二次开发中x86和x64版本问题
  • 程序运行时缺失libufun.lib等库文件的问题

并对如何配置开发环境进行说明,最后给出一个实例及演示视频:

  • 如何配置UG二次开发环境?
  • 实例及视频演示

(1) UG二次开发中x86和x64版本问题

做UG二次开发时,版本问题一定要有清晰的概念,电脑分为x86(32位)和x64(64位)。UG软件的版本也有x86和x64之分。x86的UG,对应的是x86的支持库文件lib x86,x64的UG对应的支持库文件lib x64。

那么好了,x86的电脑只能安装x86的UG软件,一般在这样的环境下进行二次开发不会有太大的问题。

而x64的电脑,可以安装x64也可以安装x86的UG软件,这个时候,如果你要生成的x64的UG软件可以用的二次开发程序,你电脑里安装的UG得是x64的版本,这样在编译时候,用到的lib x64的库文件,因此你生成的dll或者exe可以在x64版本的UG中使用。

同理,如果要使生成的dll或者exe可以在x86的UG版本中使用,那么编译代码的时候提供的库文件得是x86版本的lib。

这些lib里包含了UG OpenAPI的实现,不同版本的会有不同,所以需要确保对应关系,方能确保程序正确运行。

小结:

x86 UG → x86 lib → 生成的dll或者exe是x86版本的 → 可以在 x86 UG上运行 → 可以在x86或者x64的电脑系统上运行

x64 UG → x64 lib → 生成的dll或者exe是x64版本的 → 可以在 x64 UG上运行 → 只能在x64位的电脑系统上运行


(2) 程序运行时缺失libufun.lib等库文件的问题

这个应该是新手常常遇到的问题:在尝试UG的external模式时,遇到这个问题

具体情况是:对visual studio中的“附加包含目录”与“附加依赖性”

1
2
3
附加包含目录:$(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目录下。

目前了解到的解决办法是:

  • 直接将生成的exe文件拷贝到UGII目录下,双击运行,试过了,可以正常运行;

  • 将整个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 7.5\UGII

设置之后,生成的exe便可成功运行,而不会再提示找不到libufun.dll

之前上面所述其实道理一样,只是没有从本质上解决问题,通过设置环境变量之后便可不用将生成的exe文件复制到UGII目录下了。

update:2012-3-12 16:29:39

设置完Path后需要重启电脑。


(3) 如何配置UG二次开发环境?

如何配置UG二次开发环境?下面以UG7.5在visual studio2015下的配置为例进行简单的说明。

1、设置:UGII_BASE_DIR
目的是为UGII目录下的库文件设置一个宏,在Visual Stuido配置附加包含目录的时候直接引用这个宏即可,而不需要在项目解决方案里直接设置软件的安装路径,这样一个好处就是,二次开发程序在不同的电脑里编译的时候,只要在不同的电脑里将宏所对应的路径做修改就可以,而不必去改项目解决方案属性中附加包含目录的值。

具体设置为:“我的电脑-右键属性-高级-环境变量-系统变量”,新建一个环境变量(一般UG安装的时候已经默认设置好了,如果没有就按此步骤设置)

1
2
3
变量名:UGII_BASE_DIR

变量值:C:\Program Files\UGS\NX 7.5\UGII

2、增加:UGII_USER_DIR
目的是告诉系统用户开发的程序放在哪里了,系统知道路径后在启动UG的时候会把用户开发的程序也进行加载,这样才能在程序里调用。用户路径需要设置为全英文的(可能新版本的UG已经支持中文了?没有去尝试),该路径下有两个目录startupapplication,其中startup用于存放二次开发得到的dll,application用于存放采用UG风格的对话框文件等,一般如果是MFC开发,则只有dll都放startup,定义了这个环境变量后,在UG启动的时候会加载这个目录下的dll和对话框文件,从而使得可以在UG里调用。

具体设置为:“我的电脑-右键属性-高级-环境变量-系统变量”,新建一个系统变量

1
2
3
变量名:UGII_USER_DIR

变量值:C:\Users\hxl650\Desktop\UG_workspace

3、设置:Path
这种情况主要是针对在外部模式下,程序不能运行的情况(详见本文的前半段:(2) 程序运行时缺失libufun.lib等库文件的问题)

4、在Visual studio中设置“附加包含目录”

  • 项目属性 - C/C++ - 常规 - 附加包含目录 - $(UGII_BASE_DIR)\ugopen
  • 项目属性 - 链接器 - 常规 - 附加包含目录 - $(UGII_BASE_DIR)\ugopen

项目属性 - C/C++ - 常规 - 附加包含目录
项目属性 - 链接器 - 常规 - 附加包含目录

5、在Visual studio中设置“附加依赖性”

  • 项目属性 - 链接器 - 输入 - 附加依赖项 - libufun.lib;libugopenint.lib;libnxopencpp.lib;libnxopenuicpp.lib;

项目属性 - 链接器 - 输入 - 附加依赖项

1
2
3
前两项:libufun.lib;libugopenint.lib;是UGOPEN的
后两项:libnxopencpp.lib;libnxopenuicpp.lib;是UGNXOPEN的
根据需要自行设置

(4) 实例及视频演示
另有一个简单的视频教程和实例代码,请戳此处前往我的Githup下载。