Использование объекта C ++ dll в C #

0

У меня есть сторонний файл C++.dll, который экспортирует некоторые классы, которые я хочу использовать с С#. DLL - это приложение Win32, и я работаю над Windows 8.1 с помощью VS2013. Когда я настраивал программу С# под "Any CPU", я получаю сообщение об ошибке "System.BadImageFormatException". Я читал другие места, что может быть вызвано объединением x86 и x64. Поэтому я перекомпилировал программу С# как x86. Теперь я получаю "Невозможно загрузить DLL" libsword.dll ": указанный модуль не найден". Я убедился, что dll находится в соответствующем каталоге.

Все это отлично работает в Linux с помощью Mono.

На данный момент я понятия не имею, как действовать.

Спасибо, Джон

Теги:
mono

2 ответа

0
Лучший ответ

Проблема была в библиотеке C++, которая изначально была написана и разработана для Linux. Экспорт был определен как:

define SWDLLEXPORT _declspec( dllexport )

Который использовался как:

const char * SWDLLEXPORT  function_name(args)

который работал в Linux, но не в Windows. Изменение сигнатуры функции:

const char SWDLLEXPORT * function_name(args)

Работает как в Linux, так и в Windows.

1

BadImageFormatException вызывается, когда вы обрабатываете обычный собственный C++ код в DLL, как если бы это был код.NET. .NET также помещает код в файлы.DLL.

Вам нужно будет создать объявления С# для кода C++, чтобы.NET знал, как перейти от управляемого кода (.NET/С#) к собственному (C++) коду. Это довольно сложно, в зависимости от того, как выглядит код в вашей сторонней библиотеке. Слишком много для меня, чтобы размышлять, что вам нужно делать.

  • 0
    BadImageFormatException не возникает при попытке загрузить неуправляемую сборку - вместо этого это FileLoadException . BadImageFormatException - это когда BadImageFormatException сборка не соответствует процессу, в который она загружена, или если каркас не понимает версию, для которой он создан.
  • 0
    @codekaizen, документация по MSDN гласит: «Вы пытаетесь загрузить неуправляемую динамическую библиотеку или исполняемый файл (такой как системная DLL-библиотека Windows), как если бы это была сборка .NET Framework». Если мы получим больше информации от Джона, мы сможем определить, так ли это, или какая-то другая проблема.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню