找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 2124|回复: 1

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

[复制链接]

1

主题

0

回帖

22

积分

列兵

积分
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);

麻烦各位大佬们了!!

报错提示

报错提示

11

主题

82

回帖

2505

积分

少尉

积分
2505
发表于 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|发帖须知!|Archiver|手机版|小黑屋|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2024-12-22 22:37

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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