C# point[] 数组怎么能托管给intptr

ailby0709 2012-11-14 10:00:02
如题,C# point[] 数组怎么能托管给intptr,不是byte[]数组,是point类型的数组。求高手指点,我知道byte型数组是用这个Marshal.Copy(),point型的怎么办呢?
...全文
259 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2012-11-14
  • 打赏
  • 举报
回复
常规做法如下,要效率可以直接指针访问。
public IntPtr PointArrayToIntPtr(Point[] points)
        {
            if (points == null || points.Length == 0)
                return IntPtr.Zero;
            int size = System.Runtime.InteropServices.Marshal.SizeOf(typeof(Point));
            IntPtr lpoints = System.Runtime.InteropServices.Marshal.AllocHGlobal(size * points.Length);
            IntPtr tmp = lpoints;
            for (int i = 0; i < points.Length; i++, tmp += size)
            {
                System.Runtime.InteropServices.Marshal.StructureToPtr(points[i], tmp, false);
            }
            return lpoints;
        }
ailby0709 2012-11-14
  • 打赏
  • 举报
回复
谢谢各位,学习了!
lizhibin11 2012-11-14
  • 打赏
  • 举报
回复
也可以这样

            Point[] point = new Point[10];
            fixed(Point* p = point)
            {
                IntPtr ptr = (IntPtr)p;
                //......
            }
或者这样


            Point[] point = new Point[10];
            GCHandle handle = GCHandle.Alloc(point, GCHandleType.Pinned);
            IntPtr ptr = handle.AddrOfPinnedObject();
            //......
            handle.Free();
ailby0709 2012-11-14
  • 打赏
  • 举报
回复
引用 1 楼 qldsrx 的回复:
常规做法如下,要效率可以直接指针访问。 C# code?12345678910111213public IntPtr PointArrayToIntPtr(Point[] points) { if (points == null || points.Length == 0) return IntPtr.Z……
谢谢您的回答 C# 怎么直接指针访问呢?

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧