Thanks, Gerd! thats a useful hint, indeed!
> casting -1 as unsigned int, which is not the expected value for a variable-length string in 64-bit. Adam, I assume that line should read int err = H5T.H5Tset_size ( memType, unchecked ( ( ulong ) -1 ) ); instead. (Not tested though) Note, there should be no need to distinguish between x64 and x86. size_t translates to ulong on both platforms (in .NET). Thanks, Haymo --------------------------- Haymo Kutschbach ILNumerics GmbH <mailto:[email protected]> [email protected] ILNumerics GmbH Danziger Str. 219 10407 Berlin Tel: +49 30 4208 7799 Fax: +49 30 4208 7775 <http://www.ilnumerics.net/> http://www.ilnumerics.net <http://twitter.com/ilnumerics> http://twitter.com/ilnumerics Registergericht: Amtsgericht Potsdam Registernummer: HRB 26715 P Geschäftsführung: Haymo Kutschbach From: Hdf-forum [mailto:[email protected]] On Behalf Of Gerd Heber Sent: Montag, 9. November 2015 14:33 To: HDF Users Discussion List Subject: Re: [Hdf-forum] H5Dread Adam, I believe the problem is the second argument in the H5Tset_size call. Its of size_t, but you are casting -1 as unsigned int, which is not the expected value for a variable-length string in 64-bit. Best, G. From: Hdf-forum [mailto:[email protected]] On Behalf Of Adam Edwards Sent: Monday, November 9, 2015 7:10 AM To: HDF Users Discussion List Subject: Re: [Hdf-forum] H5Dread Hi Gerd, Thanks for replying. The header info for this dataset is: GROUP "/" { GROUP "Metadata" { DATASET "datetime" { DATATYPE H5T_STRING { STRSIZE H5T_VARIABLE; STRPAD H5T_STR_NULLTERM; CSET H5T_CSET_ASCII; CTYPE H5T_C_S1; } DATASPACE SCALAR } } Many thanks Adam From: Hdf-forum [mailto:[email protected]] On Behalf Of Gerd Heber Sent: 09 November 2015 12:53 To: HDF Users Discussion List <[email protected]> Subject: Re: [Hdf-forum] H5Dread Adam, how are you? Can you send us the h5dump output from the dataset you are trying to read? A small sample file would be great, but just the header information should be sufficient (h5dump H). Thanks, G. From: Hdf-forum [mailto:[email protected]] On Behalf Of Adam Edwards Sent: Friday, November 6, 2015 3:25 AM To: [email protected] Subject: [Hdf-forum] H5Dread Hello, I am working with ILNumerics on use of their HDF5 wrapper in an x64 c#.NET application. I have encountered an issue when trying to read a vlen string: Basic code is: datasetId = H5D.H5Dopen2 ( ds.File.ID, ds.Path, Constants.H5P_DEFAULT ); // prepare vlen data type (string) memType = H5T.H5Tcopy ( H5T.H5T_C_S1 ); int err = H5T.H5Tset_size ( memType, unchecked ( ( uint ) -1 ) ); if ( err != 0 ) { throw new ArgumentException ( "Unable to determine data size" ); } ILSize size = ds.Size; // buffer for reading pointer(s) to the string(s) IntPtr [] buffer = new IntPtr [size.NumberOfElements]; GCHandle h = GCHandle.Alloc ( buffer, GCHandleType.Pinned ); err = H5D.H5Dread ( datasetId, memType, H5S.ALL, H5S.ALL, Constants.H5P_DEFAULT, h.AddrOfPinnedObject () ); h.Free (); // now the _pointers_ to the strings should be in the buffer. We need to copy / convert them to new strings on the managed heap. ILArray<string> ret = ILMath.array<string> ( "", ds.Size ); int i = 0; foreach ( var element in buffer ) { ret [i++] = Marshal.PtrToStringAnsi ( element ); } return ret; When run on x86 it performs as expected, but on x64 we get a -1 error from the Dread call with the following std output: HDF5-DIAG: Error detected in HDF5 (1.8.9) thread 0: #000: C:\autotest\HDF518ReleaseCMake\src\H5Dio.c line 174 in H5Dread(): can't read data major: Dataset minor: Read failed #001: C:\autotest\HDF518ReleaseCMake\src\H5Dio.c line 337 in H5D_read(): unable to set up type info major: Dataset minor: Unable to initialize object #002: C:\autotest\HDF518ReleaseCMake\src\H5Dio.c line 838 in H5D_typeinfo_init(): unable to convert between src and dest datatype major: Dataset minor: Feature is unsupported #003: C:\autotest\HDF518ReleaseCMake\src\H5T.c line 4481 in H5T_path_find(): no appropriate function for conversion path major: Datatype minor: Unable to initialize object The only difference between x86 and x64 I could find was the IntPtr size (4 & 8 respectively). The current build version being used is 1.8.9. Has this issue been encountered before, and if so was it fixed in a later build? Many Thanks for any guidance you can offer. Adam Edwards | AP Sensing UK Phone: +49-7031-309-6645 | Fax: +49-7031-309-6611 | <http://www.apsensing.com/> www.apsensing.com | <https://www.facebook.com/APSensing> Facebook | <http://www.linkedin.com/company/ap-sensing> LinkedIn Place of Registration: Boeblingen | Commercial Register Stuttgart - HRB 724880 | VAT ID: DE256976415 | Managing Directors: Clemens Pohl, Gerd Koffmane
_______________________________________________ Hdf-forum is for HDF software users discussion. [email protected] http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org Twitter: https://twitter.com/hdf5
