将非托管directX嵌入C#表单

将非托管directX嵌入C#表单,c#,c++,directx,rendering,C#,C++,Directx,Rendering,我得到了一个关于在托管环境中运行directX应用程序(C++)的快速问题。我正在尝试编写一个MDI工具(用C#),其中父窗口的背景将是directX(C++)的嵌入式渲染窗口 我已经阅读过一些方法,包括将C++写入到本地DLL中,但是最好是将C++项目包含在解决方案中(我甚至不知道这是否可能)。无论如何,如果你知道一些有用的步骤,提示,或者如果这是一个坏主意,请让我知道。谢谢为了在托管窗口上使用NED DX来呈现,您需要将HWND窗口ID(使用窗体.Windows ID .toIt32)传递给

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


<>我已经阅读过一些方法,包括将C++写入到本地DLL中,但是最好是将C++项目包含在解决方案中(我甚至不知道这是否可能)。无论如何,如果你知道一些有用的步骤,提示,或者如果这是一个坏主意,请让我知道。谢谢为了在托管窗口上使用NED DX来呈现,您需要将HWND窗口ID(使用窗体.Windows ID .toIt32)传递给C++ D3DPosier-Cor。之后,每次使用该设备进行渲染时,它都会在.NET窗口上进行渲染


这样做,你可能需要两个SARAPATE项目——一个C++ DLL和.NET项目。使用COM包装器或P-调用将HWND传递给C++ DLL。

最简单的方法是将C++ /CLI项目添加到解决方案中。这将使您能够直接使用DirectX COM接口,并创建一个易于从C#代码调用的托管包装器。我曾多次采用这种方法,这是迄今为止我尝试过的最简单的混合DirectX和.Net的方法。托管DirectX曾经是一个选项,但它不再被支持,它是完全COM API的一个相当小的子集。

< P>如果您不想花费太多时间编写DirectX的C++代码,可以考虑使用 ,因为托管DirectX 1.0是不可能的,as 2.0从未离开测试版,后来被XNA取代,XNA与DirectX本身有很大不同,需要您安装XNA Game Studio

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