BadImageFormatException:PInvoke ImportDll with hdf5dll.dll

max*_*llb 2 c# pinvoke hdf5

好的,我从官方网站下载了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";
Run Code Online (Sandbox Code Playgroud)

        ///* Functions in H5.c */
        //H5_DLL herr_t H5open(void);
        [DllImport(DLLNAME,
            CharSet = StringMarshallingType)]
        public static extern herr_t H5open();
Run Code Online (Sandbox Code Playgroud)

在Program.cs中,我使用H5.H5open();,但我得到了BadImageFormatException.我需要一个不同的DLL吗?方法签名看起来不对吗?

我想,作为下一步,请在C#中获取:http://www.hdfgroup.org/HDF5/Tutor/h5lite.html.

操作系统: Windows 7 64位
环境: Visual Studio 2008 Professional

更新:我不知道这是否相关,我不记得我的环境是否是VS2008 SP1,但这个问题可能是解决这个谜团的关键.我现在正试图在家里重复32位VS 2010的场景.

Ste*_*ner 6

当您尝试在x64进程中针对x86体系结构运行P/Invoke操作时,就会发生这种情况,反之亦然.我会检查所有这些,如果它们不同步,请考虑将HDF5定位的处理器定位到您的应用程序,或检查特定于处理器的版本是否可用.