将非托管的directX嵌入到C#表单中

时间:2008-11-05 19:42:17

标签: c# c++ directx rendering

我有一个关于在托管环境中运行directX应用程序(C ++)的快速问题。我正在尝试编写一个MDI工具(在C#中),其中父窗口的背景将是directX(C ++)的嵌入式渲染窗口。

我已经阅读了将C ++编写到本机dll中的方法,但是它更倾向于能够将C ++项目包含在解决方案中(我甚至不知道这是否可行)。无论如何,如果你知道一些有用的步骤,提示,或者这一般是一个坏主意,请告诉我。谢谢!

3 个答案:

答案 0 :(得分:3)

最简单的方法是在解决方案中添加C ++ / CLI项目。这样就可以直接使用DirectX COM接口,并创建一个易于从C#代码调用的托管包装器。我已经采用了这种方法几次,这是迄今为止我尝试过的最简单的混合DirectX和.Net的方法。托管DirectX曾经是一个选项,但它不再受支持,无论如何它都是完整COM API的一个相当小的子集。

答案 1 :(得分:1)

首先在不同的dll文件中编写C ++部分并不意味着它不能与C#项目在同一个解决方案中。

为了在托管窗口上使用本机DX进行渲染,您需要将HWND窗口id(使用form.WindowId.ToInt32)传递给C ++ D3Ddevice c'tor。之后,每次使用该设备进行渲染时,都会在.NET窗口中进行渲染。

要做到这一点,你可能需要两个saparate项目 - 一个C ++ dll& .NET项目。使用COM包装器或p调用将HWND传递给C ++ DLL。

答案 2 :(得分:1)

如果您不想花太多时间为DirectX编写C ++代码,可以考虑使用 SlimDX,因为Managed DirectX 1.0是不可能的,因为2.0从未离开测试版,后来取代了与DirectX本身完全不同的XNA,并要求你安装XNA Game Studio

SlimDX是托管directx的开源版本,具有略微不同的API和内部结构,但它易于使用。最近发布的版本非常稳定。我目前正在用它来编写一个生产应用程序。

SlimDX

Managed DirectX