Вставить неуправляемый DirectX в форму C # - PullRequest
2 голосов
/ 05 ноября 2008

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

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

Ответы [ 3 ]

3 голосов
/ 05 ноября 2008

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

1 голос
/ 06 ноября 2008

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

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

SlimDX

Управляемый DirectX

1 голос
/ 05 ноября 2008

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

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

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

...