Вопрос

Хорошо, у меня есть библиотека 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();

И в программе.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 дома.

Это было полезно?

Решение

Это происходит, когда вы пытаетесь запустить операции P / вызывать DLL, предназначенные для архитектуры x86 из процесса или наоборот X64 или наоборот. Я бы проверил все это, и если они вне синхронизации, рассмотрите возможность нацеливания на процессор, что целевые цели HDF5 с вашим приложением или проверки, доступна ли версия для конкретной процессоры.

Другие советы

Глядя на то документация Отсюда, функциональный прототип:

herr_t h5open (пустота);

А также DLLName запрещено, вы должны явно указать имя DLL - никаких заданных вопросов.

Правильная подпись:

DLLIMPORT («HDF5DLL.DLL»)] публичный статический внешний HERR_T H5OPEN ();

Убедитесь, что у вас есть тип herr_t определенный...

Пусть время выполнения позаботится о маршалке для вас ....

Также убедитесь, что DLL присутствует на том же пути, что и сгенерировано скомпилированное .exe (ваш код).

Редактировать: Благодаря ОП за указываю на мой блупер ....

На X64 Operationsystems .NET Программы обычно работают в режиме X64. Просто установите целевую архитектуру процессора на X86 и попробуйте снова. Просто в Visual Studio откройте свой «Конфигурация решения» -Manager и добавьте новую целевую платформу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top