QQ登录

只需一步,快速开始

快捷登录

登录 或者 注册 请先

UG爱好者

查看: 1768|回复: 1
打印 上一主题 下一主题

[求助] C#、NX的二次开发,Tag[]类型怎么转换为IntPtr。麻烦大佬帮忙看看怎么修改

[复制链接]

列兵

Rank: 1

1

主题

1

帖子

22

积分
跳转到指定楼层
楼主
发表于 2021-4-2 08:26:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
想使用CallGrip,想将一个新的Tag类型的obj数组传递过去,做相应的计算赋值后把值传递回来。有以下的代码:
Args[] grip_arg_list = new Args[1];
Tag[] obj = new Tag[2];
grip_arg_list[0].type = UFConstants.UF_TYPE_TAG_T_ARRAY;
grip_arg_list[0].length = 2;
GCHandle IndicesHandle = GCHandle.Alloc(obj, GCHandleType.Pinned);//为指定对象分配指定类型的句柄
IntPtr s = IndicesHandle.AddrOfPinnedObject();
grip_arg_list[0].address = s;
IndicesHandle.Free();

CallGrip("E:\\Demo.grx",1,ref grip_arg_list[size=1em]);//引用函数


在UG中调试出现了错误:


System.ArgumentException: Object 包含非基元或非直接复制到本机结构中的数据。
在 System.Runtime.InteropServices.GCHandle.InternalAlloc(Object value, GCHandleType type)
在 System.Runtime.InteropServices.GCHandle.Alloc(Object value, GCHandleType type)
在 Program.Main(String[] args) 位置 C:\Users\mo\Desktop\callGripDemo\Program.cs:行号 124
&MACRO MESSAGE_BOX  -2  外部库出错。有关详细信息,请参见系统日志

[size=1em]

[size=1em]124行内容是:

  GCHandle IndicesHandle = GCHandle.Alloc(obj, GCHandleType.Pinned);

麻烦各位大佬们了!!

1.PNG (41.91 KB, 下载次数: 19)

报错提示

报错提示

有奖推广贴子: 

回复

使用道具 举报

少尉

Rank: 5Rank: 5

11

主题

93

帖子

2503

积分
沙发
发表于 2022-10-5 20:03:08 | 只看该作者
IntPtr ptr = IntPtr.Zero;
Tag tag = Tag.Null;
ptr = NXOpen.Utilities.JAM.Lookup(tag);//Tag转IntPtr
tag = NXOpen.Utilities.JAM.Lookup(ptr);//IntPtr转Tag
回复 支持 反对

使用道具 举报

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

本版积分规则

 
 
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-6-3 01:29

返回顶部