第一个代码上没什么问题,ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconbufferssample.htm就是这么说的。估计是你的DLL的缺省编码(UNICODE或者ANSI)和C#程序不一致。你把
UnmanagedType.ByValTStr 改成别的类型看看DWORD GetSels( SEL_Class* bufptr,LPDWORD pSelNumber);
的意思是bufptr的内存是要调用者分配的,所以用 out IntPtr 不合适
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconarrayssample.htm
看看这段 int TestArrayOfStructs(MYPOINT* pPointArray, int size);    [ DllImport( "..\\LIB\\PinvokeLib.dll" )]
   public static extern int TestArrayOfStructs([In, Out] MyPoint[] 
      pointArray, int size );MyPoint[] points = { new MyPoint(1,1), new MyPoint(2,2), new MyPoint(3,3) };
LibWrap.TestArrayOfStructs( points, points.Length );很简单。
以前说的那个IntPtr是因为你用了 **