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); } }}