小拇指的生 发表于 2021-4-2 08:26:40

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

想使用CallGrip,想将一个新的Tag类型的obj数组传递过去,做相应的计算赋值后把值传递回来。有以下的代码:
Args[] grip_arg_list = new Args;
Tag[] obj = new Tag;
grip_arg_list.type = UFConstants.UF_TYPE_TAG_T_ARRAY;
grip_arg_list.length = 2;
GCHandle IndicesHandle = GCHandle.Alloc(obj, GCHandleType.Pinned);//为指定对象分配指定类型的句柄
IntPtr s = IndicesHandle.AddrOfPinnedObject();
grip_arg_list.address = s;
IndicesHandle.Free();

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


在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外部库出错。有关详细信息,请参见系统日志



124行内容是:
GCHandle IndicesHandle = GCHandle.Alloc(obj, GCHandleType.Pinned);

麻烦各位大佬们了!!

dxl1236* 发表于 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
页: [1]
查看完整版本: C#、NX的二次开发,Tag[]类型怎么转换为IntPtr。麻烦大佬帮忙看看怎么修改