Использование класса C++ DLL в приложении C#

Изображение по умолчанию должно быть в кодировке base64. Вы можете получить строку base64 вашего изображения по умолчанию, например здесь .

Затем проверьте значение $ Image [$ i] в цикле for. Если это значение означает отсутствие изображения в БД, установите для jImages ['. $ I.'] Значение base64 вашего изображения по умолчанию.


46
задан Bill the Lizard 16 April 2010 в 20:34
поделиться

5 ответов

Простой способ принять класс Foo:

  1. Создают C++ / проект CLI, называют этот FooWrapper.
  2. Заставляют FooWrapper зависеть от неуправляемого dll (однако, Вы обычно были бы).
  3. Создают управляемый класс ManagedFoo, который содержит единственное частное поле экземпляра типа Foo*.
  4. обеспечивают общедоступные функции обертывания в ManagedFoo, которые передают на базовом поле экземпляра.
  5. Дополнительно (хотя рекомендуется):
    • преобразовывают параметры из идиом .NET (строки и т.п.) к идиомам C++ (станд.:: строка или символ*)
    • ловят неуправляемые исключения и бросают управляемые вместо этого

Затем, Вы заставляете свой код c# зависеть от FooWrapper project/dll и гарантировать, что неуправляемый dll правильно развертывается с ним, как это сделано, зависит от неуправляемого dll, но в том же каталоге обычно достаточно.

, Если функции не полагаются на экземпляры класса, затем еще более простого, P/Invoke

44
ответ дан Draken 26 November 2019 в 20:38
поделиться

Этот ответ мог бы быть излишеством для библиотеки единого класса, но БОЛЬШОЙ ГЛОТОК является хорошим решением для "обертывания" классов C/C++ для использования с других языков. Это работает хорошо с C#.

См. http://www.swig.org/ .

8
ответ дан Stewart 26 November 2019 в 20:38
поделиться

DllImport является Вашим лучшим выбором. Существует немного массирования типа данных, особенно если Вы передаете структуры, но можно сделать почти что-либо с ним.

3
ответ дан Steve 26 November 2019 в 20:38
поделиться

Вам нужен прокси (шаблон GoF) посредник для образования моста управляемой/неуправляемой границы.

Две опции:

  • А C++ / обертка CLI
  • А обертка COM.

Первый будет более прямым, и последний имеет два шага чистый C++-> COM->.NET.

2
ответ дан Richard 26 November 2019 в 20:38
поделиться

Иногда, легче обеспечить Ваш собственный интерфейс C. БОЛЬШОЙ ГЛОТОК нетривиален для установки. У меня есть управляемый С++ использования и C++ / CLI, и они в порядке. Самое легкое просто делало обертку C (и может использоваться приблизительно любым другим языком, так как большинство имеет способ вызвать функцию C).

2
ответ дан chrish 26 November 2019 в 20:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: