【发布时间】:2011-03-29 04:00:30
【问题描述】:
好的,我有从官网下载的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 位
环境: Visual Studio 2008 Professional
更新:不知道会不会有关系,也不记得我的环境是不是VS2008SP1,不过this question可能会持有解开谜团的关键。我现在正在尝试在家中在 32 位 VS 2010 上重复该场景。
【问题讨论】:
-
这是在 64 位架构上,现在只需阅读下面史蒂夫的评论吗?请附上我们在这里猜测的更多细节......
-
谢谢。我在 Windows x64 上,但我正在编译我的 .NET 应用程序以定位“x86”。这还可以吗?
-
检查 HDF 并确保他们为您提供的 dll 也是为 x86 架构构建的。
-
我一直在使用 x86 DLL,但我会再试一次,使用 64 位 DLL。
-
哇,迁移到 64 位 DLL 似乎会使 vshost 崩溃而没有捕获异常。