У меня есть собственный C++ DLL с помощью DirectX, который я хочу смочь использовать через C#, чтобы смочь создать инструменты создания содержания.
COM добавления потребовал бы настоящего усилия, которым это кажется. P/Invoke может использоваться для поддержания классов с помощью полиморфизма, или он потребовал бы, чтобы я перенес большую часть кода для упрощения использования P/Invoke?
Это там лучшее решение доступно? Или я должен даже рассмотреть запись инструментов в C++ с помощью QT, возможно?
Мне всегда кажется, что C++/CLI - это лучший вариант при взаимодействии C# и C++. Вы можете легко создать тонкие обертки для неуправляемой библиотеки, которые будут выглядеть точно так же, как управляемая библиотека в коде C#. Это также дает вам больше контроля над тем, как выполняется маршалинг и пиннинг.
Полагаю, существуют способы автоматической генерации C++/CLI, но я никогда ими не пользовался.
Больше информации о C++/CLI здесь: http://msdn.microsoft.com/en-us/magazine/cc163681.aspx
Я полагаю, что рендеринг в D3D непосредственно из C# - это не вариант? (потому что это, конечно, было бы проще!)
Давным-давно я использовал SWIG для автоматического поддержания "привязки" C# моего кода C++ rendering DLL. Он использует P/Invoke для раскрытия объектов C++ на стороне C#, и вам больше не придется поддерживать этот код.
Вам не нужно писать перенос на QT.
Я советую вам написать класс Observer как на C #, так и на C ++, и скрыть вызовы собственных функций к нему. Схема похожа на эту
Ваш код на C # -> Observer (C #) -> Native вызов Observer (C ++) -> Вызов вашей dll.