在 NX 解决方案下,我添加了两个公共库,一个是Common,一个是 Cam ,输出类型均为dll
然后我在使用开发包功能A时,ufusr入口添加了模块检查:
UF_initialize();if (!LCCAM::IsInCAM()){ LCC::MessageBox(true, "请进入CAM环境!"); UF_terminate(); return; }IsInCAM()代码在Cam库中,代码如下:
bool LCCAM::IsInCAM(){ int module = UF_APP_NONE; UF_ask_application_module(&module); return (module == UF_APP_CAM);}这时会提示报错 信息 ,请进入CAM环境。
然后我手动进入CAM模块,就会报错:
(1)VS编译器环境调试方式:

(2)使用NX编译后的 安装包 方式:

注意:重新生成解决方案后,Debug/Release均报错。
DLL卸载方式为:Session::LibraryUnloadOptionImmediately
(1)prt为新建prt,保存,关闭重新打开。如果prt新建没有关闭则不会报错
(2)测试prt并不在CAM模块下,且没有手动切入到CAM模块
有一个很奇怪的现象,解决方案中有很多项目,
如果项目ufusr入口处添加了LCCAM::IsInCAM(),进入CAM模块一定会失败!
如果项目ufusr入口处没有添加LCCAM::IsInCAM(),进入CAM模块也可能会失败,绝大多数失败!
我开始以为是Cam库有问题,然而发现有一个项目只使用了Common库,进入CAM模块也会失败..................
这就很奇怪了!为什么只使用了Common库也会有问题呢,我决定从Common库这一点入手。
因为这个Common库是从另外一个解决方案LS那里摘过来并加以补充的,我决定用LS测试一下,
测试发现LS居然可以进入CAM模块!
那就肯定是Common库新增代码的问题了,最终发现:
但是没道理啊,别的解决方案也用了cam的uf函数,为什么没有报错呢?
为此我去查找其他的解决方案,很可惜没有找到NX12的,但却找到一个NX10的解决方案,发现公共库里是有uf的,
我测试了一下,他们的功能可以切入到CAM模块,这是为什么呢?
然后我发现,他们输出的是lib,然后我就把Common库改为lib(记得把代码中DLL_EXPORT等关键字删除),测试通过。
难道输出lib就可以了吗?此时的我开心的以为找到了答案。
于是我把Cam库也改成了lib,事实证明我还是太年轻了,Cam库还是报错。
试了很多方法,都没有找到Cam库失败的原因。退一步讲,即使Cam库成功了,那为什么输出dll就不行呢?
这个问题留在这里,找到原因后会更贴。知道答案的朋友也请讲解一下,多谢!
虽然不知道原因是什么,就暂认为NX对于CAM模块支持不好吧,其他模块是没有这个问题的,目前有两个方法可以避免:
(1)通过标签的显示,即仅在CAM模块下显示该标签
(2)卸载时使用Session::LibraryUnloadOptionAtTermination
extern "C" DllExport int ufusr_ask_unload(){ //return (int)Session::LibraryUnloadOptionExplicitly; return (int)Session::LibraryUnloadOptionImmediately; //return (int)Session::LibraryUnloadOptionAtTermination; //使用Termination不会报错}
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删