我正在尝试在Visual Studio 2013(C ++)中使用HDF5示例,但遇到了困难。
示例代码可以在这里找到:http://www.hdfgroup.org/ftp/HDF5/examples/misc-examples/stratt.cpp ,我也将代码完整地贴在下面。
我的第一个问题是:最新的HDF5(版本1.8.13)是否能与Visual C++ 2013一起使用?文档中只提到了2012年,但是通常情况下,在文档中提到2012年的地方,我使用2013年并没有出现问题。
我尝试将示例程序作为32位和64位应用程序运行。我最终希望使用64位。对于32位的项目设置,在VC ++设置下,我添加了包含目录:C:\Program Files (x86)\HDF_Group\HDF5\1.8.13\include。对于库目录,我添加了:C:\Program Files (x86)\HDF_Group\HDF5\1.8.13\lib。
对于链接器->输入,我添加了:hdf5.lib; hdf5_cpp.lib。当我运行时,我收到了消息:“程序无法启动,因为计算机上缺少hdf5.dll...”这不出乎意料。所以我从目录C:\Program Files (x86)\HDF_Group\HDF5\1.8.13\bin中添加了hdf5.dll和hdf5_cpp.dll到调试目录。
然后我得到了运行时错误:“应用程序无法正常启动(0xc000007b)。单击“确定”关闭应用程序。 有什么想法吗?
顺便说一句,当我尝试使用64位设置、目录和文件运行x64位版本时,会出现略有不同的错误。程序一直到最后都在运行,但控制台没有写入任何属性,没有生成文件,并且在最后(在按下最后一行上的f10之后)出现了可怕的错误:
Unhandled exception at 0x000007FEF05E512D (msvcp120d.dll) in HDF5AttributeExample2.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF。
在这两种情况下(32位和64位),我的直觉告诉我,我有某种配置问题(错误的lib、错误的设置等)。如果有人能提供任何帮助或建议,我将不胜感激。
如果有其他Visual C++ HDF5示例,请务必告诉我!
谢谢,
戴夫
示例代码可以在这里找到:http://www.hdfgroup.org/ftp/HDF5/examples/misc-examples/stratt.cpp ,我也将代码完整地贴在下面。
我的第一个问题是:最新的HDF5(版本1.8.13)是否能与Visual C++ 2013一起使用?文档中只提到了2012年,但是通常情况下,在文档中提到2012年的地方,我使用2013年并没有出现问题。
我尝试将示例程序作为32位和64位应用程序运行。我最终希望使用64位。对于32位的项目设置,在VC ++设置下,我添加了包含目录:C:\Program Files (x86)\HDF_Group\HDF5\1.8.13\include。对于库目录,我添加了:C:\Program Files (x86)\HDF_Group\HDF5\1.8.13\lib。
对于链接器->输入,我添加了:hdf5.lib; hdf5_cpp.lib。当我运行时,我收到了消息:“程序无法启动,因为计算机上缺少hdf5.dll...”这不出乎意料。所以我从目录C:\Program Files (x86)\HDF_Group\HDF5\1.8.13\bin中添加了hdf5.dll和hdf5_cpp.dll到调试目录。
然后我得到了运行时错误:“应用程序无法正常启动(0xc000007b)。单击“确定”关闭应用程序。 有什么想法吗?
顺便说一句,当我尝试使用64位设置、目录和文件运行x64位版本时,会出现略有不同的错误。程序一直到最后都在运行,但控制台没有写入任何属性,没有生成文件,并且在最后(在按下最后一行上的f10之后)出现了可怕的错误:
Unhandled exception at 0x000007FEF05E512D (msvcp120d.dll) in HDF5AttributeExample2.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF。
在这两种情况下(32位和64位),我的直觉告诉我,我有某种配置问题(错误的lib、错误的设置等)。如果有人能提供任何帮助或建议,我将不胜感激。
如果有其他Visual C++ HDF5示例,请务必告诉我!
谢谢,
戴夫
#include <string>
#include <iostream>
#include "H5Cpp.h"
using std::cout;
using std::endl;
using namespace H5;
const H5std_string FILE_NAME("string_test.h5");
const H5std_string DS_NAME("Data Set 1");
const H5std_string ATTR_NAME("String Attribute");
int main(void) {
// Create the named file
H5File file = H5File(FILE_NAME, H5F_ACC_TRUNC);
// Create new dataspace for the dataset
const int rank = 3;
const int dim1 = 2;
const int dim2 = 2;
const int dim3 = 2;
hsize_t dims[rank] = { dim1, dim2, dim3 };
DataSpace dataspace = DataSpace(rank, dims);
// Create new datatype for the dataset
FloatType datatype(PredType::NATIVE_FLOAT);
// Create the dataset
DataSet dataset = file.createDataSet(DS_NAME, datatype, dataspace);
// Set up write buffer 'matrix'
int q, r, s;
float value;
float matrix[dim1][dim2][dim3];
for (q = 0; q < dim1; q++)
for (r = 0; r < dim2; r++)
for (s = 0; s < dim3; s++)
{
value = 1.111 + (q * r * s);
matrix[q][r][s] = value;
}
// Write data to the dataset
dataset.write(matrix, datatype);
// Create new dataspace for attribute
DataSpace attr_dataspace = DataSpace(H5S_SCALAR);
// Create new string datatype for attribute
StrType strdatatype(PredType::C_S1, 256); // of length 256 characters
// Set up write buffer for attribute
const H5std_string strwritebuf("This attribute is of type StrType");
// Create attribute and write to it
Attribute myatt_in = dataset.createAttribute(ATTR_NAME, strdatatype, attr_dataspace);
myatt_in.write(strdatatype, strwritebuf);
// Set up read buffer for attribute
H5std_string strreadbuf("");
// Open attribute and read its contents
Attribute myatt_out = dataset.openAttribute(ATTR_NAME);
myatt_out.read(strdatatype, strreadbuf);
// Display attribute contents
cout << "Attribute contents: " << strreadbuf << endl;
return 0;
}