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);
麻烦各位大佬们了!!
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]