好的,我有从官方网站下载的HDF5库,并且有一些DLL,包括hdf5dll.dll和hdf5_hldll.dll。
我在我的类H5
,H5LT
,H5F
和H5T
中有一些本地调用的包装器。来自H5.cs的示例:
namespace HDF5
{
using hid_t = System.Int32;
using herr_t = System.Int32;
using hsize_t = System.UInt64;
using size_t = System.UInt32;
// hbool_t is 0:false, +:true
using hbool_t = System.UInt32;
// htri_t is 0:false, +:true, -:failure
using htri_t = System.Int32;
public class H5
{
const CharSet StringMarshallingType = CharSet.Ansi;
const string DLLNAME = "hdf5dll.dll";
///* Functions in H5.c */
//H5_DLL herr_t H5open(void);
[DllImport(DLLNAME,
CharSet = StringMarshallingType)]
public static extern herr_t H5open();
在Program.cs中,我使用
H5.H5open();
,但得到一个BadImageFormatException
。我是否需要其他DLL?方法签名看起来不对吗?下一步,我想在C#中获取它:http://www.hdfgroup.org/HDF5/Tutor/h5lite.html。
操作系统:Windows 7 64 bit
环境:Visual Studio 2008专业版
更新:我不知道这是否相关,并且我不记得我的环境是否是VS2008 SP1,但是this question可能是解决这个奥秘的关键。我截至目前正在尝试在家里重复32位VS 2010的方案。
最佳答案
当您试图在x64进程内的x86体系结构的dll上运行P / Invoke操作时,就会发生这种情况,反之亦然。我会检查所有这些内容,如果它们不同步,请考虑将HDF5定位的处理器与您的应用程序一起定位,或者检查是否有特定于处理器的版本。