Использование DirectX DLL (C ++) из C # - PullRequest
6 голосов
/ 12 февраля 2010

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

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

Есть ли лучшее решение? Или мне даже стоит подумать о написании инструментов на C ++ с использованием Qt?

Ответы [ 3 ]

2 голосов
/ 12 февраля 2010

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

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

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

1 голос
/ 12 февраля 2010

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

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

0 голосов
/ 17 февраля 2010

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

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

Ваш код в C # -> Observer (C #) -> Собственный вызов Observer (C ++) -> Звонки в вашу DLL.

...