好的,我从官方网站下载了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 .

OS: Windows 7 64位
环境: Visual Studio 2008专业人士

更新: 我不知道这是否会相关,我不记得我的环境是否是VS2008 SP1, , 但 这个问题 可以掌握解决这个谜的钥匙。截至目前,我正在尝试重复32位与2010年在家中的情况。

有帮助吗?

解决方案

当您尝试在X64进程中用于X86体系结构的DLL上运行P/调用操作时,就会发生这种情况,反之亦然。我将检查所有这些,如果它们不超出同步,请考虑针对HDF5目标的处理器,或检查是否有特定于处理器的版本。

其他提示

看着 文档 从这里,函数原型是:

herr_t H5open(void);

而且,dllname也是不允许的,您必须明确指定DLL名称 - 无问题。

适当的签名是:

[DllImport("hdf5dll.dll")]public static extern herr_t H5open();

确保您有类型 herr_t 定义...

让运行时照顾您的编制。

另外,请确保DLL与编译.EXE(您的代码)生成的位置相同。

编辑: 感谢OP指出了我的Blooper。

在X64 OperatingSystems .NET程序上通常以X64模式运行。只需将目标处理器体系结构设置为X86,然后重试即可。只是在Visual Studio中打开您的“解决方案配置” - 经理并添加新的目标平台。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top