Использование DirectX DLL (C++) от C#

У меня есть собственный C++ DLL с помощью DirectX, который я хочу смочь использовать через C#, чтобы смочь создать инструменты создания содержания.

COM добавления потребовал бы настоящего усилия, которым это кажется. P/Invoke может использоваться для поддержания классов с помощью полиморфизма, или он потребовал бы, чтобы я перенес большую часть кода для упрощения использования P/Invoke?

Это там лучшее решение доступно? Или я должен даже рассмотреть запись инструментов в C++ с помощью QT, возможно?

6
задан Daniel Dimovski 12 February 2010 в 14:32
поделиться

3 ответа

Мне всегда кажется, что C++/CLI - это лучший вариант при взаимодействии C# и C++. Вы можете легко создать тонкие обертки для неуправляемой библиотеки, которые будут выглядеть точно так же, как управляемая библиотека в коде C#. Это также дает вам больше контроля над тем, как выполняется маршалинг и пиннинг.

Полагаю, существуют способы автоматической генерации C++/CLI, но я никогда ими не пользовался.

Больше информации о C++/CLI здесь: http://msdn.microsoft.com/en-us/magazine/cc163681.aspx

2
ответ дан 17 December 2019 в 18:15
поделиться

Я полагаю, что рендеринг в D3D непосредственно из C# - это не вариант? (потому что это, конечно, было бы проще!)

Давным-давно я использовал SWIG для автоматического поддержания "привязки" C# моего кода C++ rendering DLL. Он использует P/Invoke для раскрытия объектов C++ на стороне C#, и вам больше не придется поддерживать этот код.

1
ответ дан 17 December 2019 в 18:15
поделиться

Вам не нужно писать перенос на QT.

Я советую вам написать класс Observer как на C #, так и на C ++, и скрыть вызовы собственных функций к нему. Схема похожа на эту

Ваш код на C # -> Observer (C #) -> Native вызов Observer (C ++) -> Вызов вашей dll.

0
ответ дан 17 December 2019 в 18:15
поделиться
Другие вопросы по тегам:

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