Как вызвать C ++ DLL из проекта приложения C # Windows - PullRequest
3 голосов
/ 28 мая 2010

Я создал DLL в C ++, используя проект библиотеки классов в Visual Studio. Мне нужно вызвать метод в DLL из приложения C #.

Я узнал, что есть 2 подхода. Один из них - добавить ссылку на проект dll в проект C # или использовать DllExport для экспорта. Однако, когда я пробовал оба способа, он всегда выдает следующую ошибку при вызове метода dll во время выполнения.

Произошло необработанное исключение типа 'System.BadImageFormatException' в TestClient.exe Дополнительная информация: Предпринята попытка загрузить программу с неверным форматом. (Исключение из HRESULT: 0x8007000B)

Могу ли я узнать, как избежать этой проблемы?

Заранее спасибо!

1 Ответ

5 голосов
/ 28 мая 2010

Эта ошибка означает, что вы пытаетесь загрузить 32-битную DLL в 64-битный процесс или 64-битную DLL в 32-битный процесс. В Windows разрядность DLL должна соответствовать разрядности процесса, чтобы он мог правильно загружаться.

Ваш родной DLL 32- или 64-разрядный? В настройках сборки проекта C # на какую платформу вы ориентируетесь? Если вы зайдете в свойства проекта C #, вы можете перейти на вкладку «Сборка» и изменить «целевой объект платформы» на нечто конкретное, например x86 или x64, в соответствии с платформой, для которой была создана ваша собственная DLL.

Другой альтернативой может быть создание встроенной библиотеки DLL, соответствующей платформе вашего приложения C #. Если платформа приложения C # - AnyCPU, то она будет работать как 32-разрядная в 32-разрядной Windows и 64-разрядная в 64-разрядной Windows. Из-за этого вам потребуется как 32-, так и 64-битная версия вашей нативной DLL.

Я бы порекомендовал установить платформу вашего приложения C # на что-то конкретное (x86, x64), а затем изменить платформу своей нативной библиотеки DLL на соответствующую.

...