badImageFormateXception:pinvoke importdll with hdf5dll.dll
题
好的,我从官方网站下载了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中打开您的“解决方案配置” - 经理并添加新的目标平台。