Hello!

I'm writing an interface for HDF5 library for Delphi. So far I imported most of the library procedures; I can now successfully browse HDF5 files (query groups/datasets/attributes) and read data.

However I'm facing a problem regarding variable-length string attributes. When reading such attribute, HDF5 library does the memory allocation; but I couldn't find a documented way to properly free the memory.

h5dump returns the following for the attribute:

     ATTRIBUTE "description" {
        DATATYPE  H5T_STRING {
           STRSIZE H5T_VARIABLE;
           STRPAD H5T_STR_NULLTERM;
           CSET H5T_CSET_ASCII;
           CTYPE H5T_C_S1;
        }

I'm now using the following code, and it seems to do the job. But using H5Dvlen_reclaim for attribute data isn't probably correct (as H5D prefix suggests).

var
  Attribute: IHDF5Attribute;
  MemType: IHDF5Type;
  Data: Pointer;
begin
  Attribute := GetAttribute(AObj, AName);
  MemType := THDF5Type.Create(
              Dll.H5Tcopy(Dll.H5T_C_S1),
              Dll.H5Tclose);
  Dll.H5Tset_size(MemType.ID, H5T_VARIABLE);
  Dll.H5Aread(Attribute.ID, MemType.ID, @Data);
  try
    // use Data
  finally
    Dll.H5Dvlen_reclaim(GetType(Attribute).ID,
      GetSpace(Attribute).ID, H5P_DEFAULT, @Data);
  end;
end;

What is the proper way to free the memory allocated by H5Aread for variable-length data?

Best wishes,
Andrey Paramonov

--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.


_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org

Reply via email to