@@ -29,14 +29,16 @@ public class CSharpOutputDataSet: CSharpDataSet
2929 private List < GCHandle > _handleList = new List < GCHandle > ( ) ;
3030
3131 /// <summary>
32- /// An array of int pointers containing strLenOrNullMap for each column.
32+ /// An array of IntPtr containing strLenOrNullMap pointers for each column.
33+ /// IntPtr is blittable and can be pinned with GCHandle.
3334 /// </summary>
34- private unsafe int * [ ] _strLenOrNullMapPtrs ;
35+ private IntPtr [ ] _strLenOrNullMapPtrs ;
3536
3637 /// <summary>
37- /// An array of void pointers containing data for each column.
38+ /// An array of IntPtr containing data pointers for each column.
39+ /// IntPtr is blittable and can be pinned with GCHandle.
3840 /// </summary>
39- private unsafe void * [ ] _dataPtrs ;
41+ private IntPtr [ ] _dataPtrs ;
4042
4143 /// <summary>
4244 /// This method extracts metadata and actual data for each column supplied
@@ -45,8 +47,8 @@ public class CSharpOutputDataSet: CSharpDataSet
4547 public unsafe void ExtractColumns ( DataFrame dataFrame )
4648 {
4749 Logging . Trace ( "CSharpOutputDataSet::ExtractColumns" ) ;
48- _strLenOrNullMapPtrs = new int * [ ColumnsNumber ] ;
49- _dataPtrs = new void * [ ColumnsNumber ] ;
50+ _strLenOrNullMapPtrs = new IntPtr [ ColumnsNumber ] ;
51+ _dataPtrs = new IntPtr [ ColumnsNumber ] ;
5052 for ( ushort columnNumber = 0 ; columnNumber < ColumnsNumber ; ++ columnNumber )
5153 {
5254 DataFrameColumn column = dataFrame . Columns [ columnNumber ] ;
@@ -123,7 +125,7 @@ DataFrameColumn column
123125 Logging . Trace ( "CSharpOutputDataSet::ExtractColumn" ) ;
124126 int [ ] colMap = GetStrLenNullMap ( columnNumber , column ) ;
125127 GCHandle colMapHandle = GCHandle . Alloc ( colMap , GCHandleType . Pinned ) ;
126- _strLenOrNullMapPtrs [ columnNumber ] = ( int * ) colMapHandle . AddrOfPinnedObject ( ) ;
128+ _strLenOrNullMapPtrs [ columnNumber ] = colMapHandle . AddrOfPinnedObject ( ) ;
127129 _handleList . Add ( colMapHandle ) ;
128130
129131 // Use the data type already determined in ExtractColumns (which preserves nvarchar/varchar distinction)
@@ -206,7 +208,7 @@ T[] array
206208 ) where T : unmanaged
207209 {
208210 GCHandle handle = GCHandle . Alloc ( array , GCHandleType . Pinned ) ;
209- _dataPtrs [ columnNumber ] = ( void * ) handle . AddrOfPinnedObject ( ) ;
211+ _dataPtrs [ columnNumber ] = handle . AddrOfPinnedObject ( ) ;
210212 _handleList . Add ( handle ) ;
211213 }
212214
0 commit comments