2008-11-05 7 views
2

Я получил быстрый вопрос о запуске приложения DirectX (C++) в управляемой среде. Я пытаюсь написать инструмент MDI (в C#), где фон родительского окна будет встроенным окном визуализации directX (C++).Вставить неконтролируемый directX в форму C#

Я читал способы, связанные с написанием C++ в родной DLL, однако было бы желательно иметь проекты C++, включенные в решение (я даже не знаю, возможно ли это, хотя). В любом случае, если вы знаете какие-то полезные шаги, подсказки или если это вообще плохая идея, пожалуйста, дайте мне знать. Благодаря!

ответ

3

Самый простой способ сделать это - добавить проект C++/CLI в ваше решение. Это позволит вам напрямую использовать интерфейсы DirectX COM и создать управляемую оболочку, которую легко вызвать из вашего кода на C#. Я сделал этот подход несколько раз, и это самый простой способ смешивания DirectX и .NET, которые я когда-либо пробовал. Управляемый DirectX был опцией, но он больше не поддерживается, и в любом случае это был довольно небольшой набор полного COM-интерфейса.

1

Прежде всего, запись части C++ в другом файле dll не означает, что она не может быть тем же решением, что и проект C#.

Чтобы использовать собственный DX для визуализации в управляемом окне, вам необходимо передать идентификатор окна HWND (используйте форму .WindowId.ToInt32) в C++ D3Ddevice c'tor. после этого каждый раз, когда вы будете использовать это устройство, он будет отображаться в окне .NET.

Для этого вам, вероятно, нужны два проекта сапарата - проект C++ dll & .NET. использовать COM-оболочку или p-invoke для передачи HWND в dll C++.

1

Если вы не хотите тратить слишком много времени на написание кода на C++ для DirectX, вы можете рассмотреть возможность использования SlimDX, так как у Managed DirectX 1.0 не может быть и речи, где 2.0 никогда не выходит из бета-версии, а затем заменяется на XNA, который сильно отличается от самого DirectX и требует установки XNA Game Studio

SlimDX - это версия управляемых DirectX с открытым кодом с немного отличающимся API и внутренней структурой, но проста в использовании. Недавно выпущенная версия очень стабильна. В настоящее время я использую его для написания производственного приложения.

SlimDX

Managed DirectX