读书人

Intptr是Struct数组的起始地址怎么获

发布时间: 2012-05-28 17:59:33 作者: rapoo

Intptr是Struct数组的起始地址,如何获取数组中其他Struct值
调用C++方法返回数组首地址

C# code
IntPtr returnIntPtr = PictureMatching.GetMatchingResult(ref result_size,sbSimpleFilePath.ToString(),sbSelectedPictruePath.ToString(), intMatchingType, rect);


这样写可以获得数组中第一个Struct值
C# code
PicMatchingResult testPicMatchingResult = (PicMatchingResult)Marshal.PtrToStructure(returnIntPtr, typeof(PicMatchingResult));


returnIntPtr是数组起始地址,result_size是数组长度,从起始地址我可以获得该Struct正确的值,但是如何得到数组其他元素?

望指教!

[解决办法]
C# code
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace WindowsFormsApplication14{    struct S    {        public int a;        public int b;    }    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();            S[] s = new S[2]            {               new S()               {                   a=1,                   b=11               },               new S()               {                   a=2,                   b=22               }            };            //for (int i = 0; i < 2; i++)            //{            //    IntPtr P = Marshal.UnsafeAddrOfPinnedArrayElement(s, i);            //    S A = (S)Marshal.PtrToStructure(P, typeof(S));            //    MessageBox.Show("a=" + A.a + "  b=" + A.b);            //}            IntPtr P = Marshal.UnsafeAddrOfPinnedArrayElement(s, 0);            S A = (S)Marshal.PtrToStructure(P, typeof(S));            MessageBox.Show("a=" + A.a + "  b=" + A.b);            P = new IntPtr(P.ToInt32() + Marshal.SizeOf(A));            A = (S)Marshal.PtrToStructure(P, typeof(S));            MessageBox.Show("a=" + A.a + "  b=" + A.b);        }    }} 

读书人网 >C#

热点推荐