QQ登录

只需一步,快速开始

快捷登录

登录 或者 注册 请先

UG爱好者

查看: 974|回复: 6
打印 上一主题 下一主题

[求助] NX开发内部插件时怎么实现对多个版本的支持?

[复制链接]

五级士官

Rank: 4

13

主题

55

帖子

967

积分
跳转到指定楼层
楼主
发表于 2024-1-22 15:46:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如我要开发一个插件,是在2306的环境下开发的,这样一些函数就无法支持更低版本,如果使用更低版本的函数开发可能会遇到不能兼容高版本的问题,有没有什么办法可以让dll兼容更多的版本,我的想法是使用不同版本的开发环境进行编译,然后在执行时根据当前运行的NX版本决定使用哪个dll.只有思路不知道具体该怎么实现,有没有大佬可以给支个招

有奖推广贴子: 

回复

使用道具 举报

贵宾

Rank: 9Rank: 9Rank: 9

14

主题

271

帖子

8495

积分

论坛技术员论坛贡献

推荐
发表于 2024-1-22 16:49:28 | 只看该作者
       如果你期望每个版本编译一个dll,让NX启动时,自动分析应该调用哪一个dll,这个方法很简单的。在NX启动的时候,获取NX版本,然后动 态调用,你开发的dll,具体哪一个,就分NX本版本就可以了。
       这也是目前市面上,其他NX二次开发工具,主流的做法。

评分

参与人数 1G币 +10 收起 理由
296567996 + 10 感谢您的帮助!!谢谢!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

贵宾

Rank: 9Rank: 9Rank: 9

14

主题

271

帖子

8495

积分

论坛技术员论坛贡献

沙发
发表于 2024-1-22 16:45:54 | 只看该作者
       要实现这样的技术,原理很简单的,就是不要用NX提供的静态库做二次开发,这样就能保证这个dll在多个版本运行(当前提提是每个版本对应的API还存在,如果某一个版本不存在了,也还是要维护的)。
       虽然这个原理很简单,但目前市面上,基本上没有几个人这样去开发,如果只开发一个简单的功能,这样玩是很容易的。但是,如果当你想开发一整套功能,都用这种技术,那就需要大量的验证,和技术维护,甚至还要对NX的封装,内部机制有一定的了解。
       目前市面上,就模圣开发的,模圣软件整套功能,用的这项技术。
回复 支持 反对

使用道具 举报

中校

Rank: 7Rank: 7Rank: 7

2

主题

268

帖子

1万

积分
地板
发表于 2024-1-22 21:17:07 | 只看该作者
我个人不是很喜欢编译成DLL,一点小改动就得重新编译。所以更倾向VB和Python
回复 支持 反对

使用道具 举报

五级士官

Rank: 4

13

主题

55

帖子

967

积分
5#
 楼主| 发表于 2024-1-24 08:43:34 | 只看该作者
Jefft* 发表于 2024-1-22 16:49
如果你期望每个版本编译一个dll,让NX启动时,自动分析应该调用哪一个dll,这个方法很简单的。在NX启 ...

函数获取到NX版本,但是要执行函数就要调用dll,这时就会出现版本不兼容问题了,我不太理解是怎么实现在调用dll之前就可以获取到NX版本版并决定调用哪个dll的,您还能帮我解答一下吗?谢谢!
回复 支持 反对

使用道具 举报

贵宾

Rank: 9Rank: 9Rank: 9

14

主题

271

帖子

8495

积分

论坛技术员论坛贡献

6#
发表于 2024-1-24 09:45:02 | 只看该作者
296567996 发表于 2024-1-24 08:43
函数获取到NX版本,但是要执行函数就要调用dll,这时就会出现版本不兼容问题了,我不太理解是怎么实现在调用 ...

       是不兼容,还是不能用?你根本就没有描述清楚,如果是不兼容,从NX1926开始,只是会弹一个警告,意思是当前编辑的dll没有在对应的VS中进行,这个警告通过NX用户默认设置可以关掉,不影响功能的使用。
       如果是完全不能启动,使用dll中的功能,那是自己写的代码有问题。解决方法很多,市面上主流的解决方法是,建VS项目的时候,只引用ufun几个库就可以了,不要引用NXOpen中的库,然后这个dll仅是获取版本和启动对应DLL的功能。
       UFUN的函数,官方基本不维护了,所以它改动的可能性低(除了管道模块,后面的版本也有很多改动)。简单点理解,如果一个dll中的功能,没有block UI也没有引用NXOpen的库,那么这个dll,99.99%是可以版本通用的,所以用这个dll来获取版本,分别调用不同的dll就可以了。
       上面只是常规手段,还有一种就是完全不用静态库,也能启动起来的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

 
 
QQ:1359218528
工作时间:
9:00-17:00
 
微信公众号
手机APP
机械社区
微信小程序

手机版|UG爱好者论坛 ( 京ICP备10217105号-2 )    论坛管理员QQ:1359218528

本站信息均由会员发表,不代表本网站立场,如侵犯了您的权利请联系管理员,邮箱:1359218528@qq.com  

Powered by UG爱好者 X3.2  © 2001-2014 Comsenz Inc. GMT+8, 2024-11-28 21:23

返回顶部