好的,我有从官方网站下载的HDF5库,并且有一些DLL,包括hdf5dll.dll和hdf5_hldll.dll。

我在我的类H5H5LTH5FH5T中有一些本地调用的包装器。来自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定位的处理器与您的应用程序一起定位,或者检查是否有特定于处理器的版本。

10-07 15:29