找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 991|回复: 24

[求助] UG 二次开发 部分入口函数 不起作用! 如何解决??? 能帮忙解决的必有答谢!

[复制链接]
90 G币 回复本帖可获得 10 G币奖励! 每人限 1 次

6

主题

68

回帖

997

积分

五级士官

积分
997
发表于 2024-11-7 10:47:33 | 显示全部楼层 |阅读模式
本帖最后由 Hi一 于 2024-11-7 20:06 编辑

最近,把自己开发的程序挂载到ug上时发现,部分入口,如:USER_PLOT,添加到环境变量去后发现它不起作用。

执行某些操作时,它并没有启动这个入口对应的程序。

我测试了其他的一些入口。它们部分可以正常运行部分无法正常运行(部分入口无法正常开启变量指向的的程序)。

官方的,很多资料和帮助文档我都查看过了,还是不能解决这个问题!

希望能帮忙解决,这个入口不起作用的问题。  或者是可以提供一种,非阻塞的循环方法。循环时不会阻碍ug的支持运行。(目的是:通过循环去检查是否要运行对应代码)

(我使用过C#的:System.Windows.Forms.Timer   Windows的消息循环 去每隔一段时间就自动运行自己的代码。虽然这个属于异步操作,理论上不会影响ug的正常运行,但是发现可能是运行机制的原因它会影响ug的正常运行。  而且ug的扩展命令它不支持多线程,也不能通过开启另外一个线程专门负责循环检查是否执行对应程序。但是网上有一些外挂是可以通过时间定时保存的。不知道他们是如何实现的 。如果入口用不了我想可以通过,通过循环去检查是否要运行对应程序,但是这个一定是不能阻碍ug正常运行的,循环才行)


(红色箭头的变量,是我要用的变量,它不起作用。  蓝色箭头的变量,我用同样的方法挂载,它们又能正常运行)

2024年.11月.07日.10时.17分.12秒.jpg












0

主题

1

回帖

19

积分

列兵

积分
19
发表于 前天 19:51 | 显示全部楼层
3079872616 发表于 2024-11-9 16:54
好高深,学习学习,看不懂

学习学习

3

主题

33

回帖

811

积分

四级士官

积分
811
发表于 6 天前 | 显示全部楼层

回帖奖励 +10 G币

太厉害了

3

主题

46

回帖

1833

积分

六级士官

积分
1833
发表于 2025-2-7 20:44:48 | 显示全部楼层

回帖奖励 +10 G币

DeepSeek 是这样回复的一、排查入口(如USER_PLOT)无法生效的原因
  • 确认环境变量设置正确性

    • 变量名必须与NX内部定义的入口名称完全一致(注意大小写敏感)。
    • 路径指向的程序或DLL需绝对路径,且无空格或特殊字符。
    • 确保环境变量添加到系统变量或用户变量后,重启NX生效。

  • 检查入口冲突
    • 某些入口可能被NX默认功能或其他插件占用。尝试将USER_PLOT改为USER_MYPLOT测试是否生效。

  • 查看NX日志
    • 打开NX安装目录下的日志文件(如ugs_root_dir\NXBIN\ugii.log),检查加载时是否报错(如DLL未找到、权限不足)。

  • 验证程序签名与依赖
    • 确保程序编译为Release模式,依赖项(如.NET框架、C++运行时库)与NX版本兼容。
    • 对于C#程序,入口函数需标记为[NXOpen.UF.UFEntry],例如:
      csharp
      [backcolor=rgba(var(--ds-rgba-transparent))]复制




      [NXOpen.UF.UFEntrypublic static void MyEntryMethod(NXOpen.UF.UFArgs args) { ... }



二、非阻塞循环的替代方案
若入口无法修复,可通过以下方法实现后台轮询,且不阻塞NX主线程:
方案1:使用NXOpen的UI事件监听
通过订阅NX的空闲事件(Idle Event),在UI空闲时执行代码:
csharp
[backcolor=rgba(var(--ds-rgba-transparent))]复制




using NXOpen;public class MyTimer{    public static void Main()    {        Session.GetSession().IdleNotify += OnIdle;    }    private static void OnIdle()    {        // 检查条件并执行代码        // 例如:检查文件、标记位等        // 重新订阅事件以持续触发        Session.GetSession().IdleNotify += OnIdle;    }}

方案2:安全的定时器 + Dispatcher
使用System.Windows.Threading.DispatcherTimer(适用于WPF线程模型):
csharp
[backcolor=rgba(var(--ds-rgba-transparent))]复制




using System.Windows.Threading;using NXOpen;public class MyTimer{    private DispatcherTimer _timer;    public void Start()    {        _timer = new DispatcherTimer();        _timer.Interval = TimeSpan.FromMilliseconds(1000); // 1秒间隔        _timer.Tick += (sender, e) =>         {            // 通过Dispatcher确保在主线程执行            Session.GetSession().Dispatcher.Invoke(() =>             {                // 检查并执行代码            });        };        _timer.Start();    }}

方案3:外挂式DLL注入(高级)
若需完全独立进程,可使用C++编写DLL注入NX进程,通过Hook消息循环或定时器API(如SetTimer)实现后台任务。此方法需熟悉Windows API和NX内部机制。

三、其他注意事项
  • NX线程限制

    • 所有NX API操作必须在主线程执行,后台线程需通过Session.GetSession().Dispatcher.Invoke()同步到主线程。

  • 避免长时间阻塞
    • 轮询逻辑需轻量(如检查标记文件、共享内存),避免复杂计算阻塞UI。

  • 测试入口有效性
    • 在NX控制台执行UFUN命令手动调用入口,验证程序是否正常加载:

      [backcolor=rgba(var(--ds-rgba-transparent))]复制




      UFUN/your_user_function_name



四、示例:通过环境变量修复入口
假设入口USER_PLOT指向C:\MyPlugins\Plot.dll,需确保:
  • 环境变量设置:

    [backcolor=rgba(var(--ds-rgba-transparent))]复制




    UGII_USER_DIR = C:\MyPluginsUSER_PLOT = Plot.dll
  • Plot.dll中导出函数符合NX规范(如C#使用[NXOpen.UF.UFEntry])。


通过以上步骤,可系统性排查入口失效问题,或通过安全的轮询机制实现后台任务。若问题仍存在,建议提供NX日志和代码片段进一步分析。

0

主题

9

回帖

396

积分

二级士官

积分
396
发表于 2025-2-7 12:39:58 | 显示全部楼层

回帖奖励 +10 G币

看不懂,只能扣6

2

主题

389

回帖

1444

积分

六级士官

积分
1444
发表于 2025-2-7 11:47:17 | 显示全部楼层

回帖奖励 +10 G币

厉害,帮顶,希望论坛大佬帮解决

9

主题

111

回帖

1248

积分

六级士官

积分
1248
发表于 2024-12-4 19:04:43 | 显示全部楼层

回帖奖励 +10 G币

厉害,看不懂

会不会是名字冲突?可能你用的变量名已经被使用了

1

主题

171

回帖

971

积分

五级士官

积分
971
发表于 2024-11-25 11:49:46 | 显示全部楼层

回帖奖励 +10 G币

这个牛了。确实没看懂

3

主题

167

回帖

2134

积分

少尉

积分
2134
发表于 2024-11-25 11:12:02 | 显示全部楼层

回帖奖励 +10 G币


看不懂,只能扣6

6

主题

232

回帖

1366

积分

六级士官

积分
1366
发表于 2024-11-25 01:20:44 | 显示全部楼层
好深奥啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

咨询QQ:1359218528|发帖须知!|Archiver|手机版|小黑屋|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2025-2-17 01:00

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表