c \ # C / C + + DLL 을 호출 하여 포인터 배열 (포인터 가 정 해진 구조 체 를 가리 키 는 것)

원본:http://bbs.csdn.net/topics/380165851
문 제 를 해결 하 다.
、、、、、、、、、、、、、、、、、、、、
Marshal. StructToptr 를 사용 할 수 있 습 니 다.
、、、、、、、、、、、、、、
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct Query
        {
            public String Address;
            public Int32 Port;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
            public String User;
        }

        public class LibWrap
        {
            //           ,C++         
            //      ,                ( IntPtr       )
            [DllImport("MyDll.dll")]
            public static extern void GetResult([In, Out] IntPtr[] array, Int32 size);
        }

        static void Main(string[] args)
        {
            const int PointersCount = 11;    //    

            IntPtr[] arrPointer = new IntPtr[PointersCount];

            // C++     Query      ,       C#        
            LibWrap.GetResult(arrPointer, PointersCount);

            Query[] arrQuery = new Query[PointersCount];    //      Query
            for (int i=0;i

、、、、、、、、、、、、、、、、、、、、、、、
직접 IntPtr 를 매개 변수 로 입력 하면 됩 니 다.배열 은 메모리 에 순서대로 저 장 됩 니 다. 호출 방법 후 IntPtr 인 자 는 배열 의 첫 번 째 값 의 주 소 를 되 돌려 줍 니 다.따라서 배열 N 번 째 요소 의 주 소 는 IntPtr + N * sizeof (struct) 입 니 다.배열 요소 의 주 소 를 얻 은 후 Marshal. PtrToStructure 로 전환 하면 됩 니 다.

좋은 웹페이지 즐겨찾기