我有一个关于在托管环境中运行 directX 应用程序 (C++) 的快速问题。我正在尝试编写一个 MDI 工具(在 C# 中),其中父窗口的背景将是 directX(C++)的嵌入式渲染窗口。
我已经阅读了将 C++ 写入本机 dll 的方法,但是最好能够将 C++ 项目包含在解决方案中(我什至不知道这是否可能)。不管怎样,如果您知道一些有用的步骤、提示,或者这通常是个坏主意,请告诉我。谢谢!
最简单的方法是将 C++/CLI 项目添加到您的解决方案中。这将使您能够直接使用 DirectX COM 接口并创建一个易于从您的 C# 代码调用的托管包装器。我已经多次采用这种方法,这是迄今为止我尝试过的最简单的混合 DirectX 和 .Net 的方法。托管 DirectX 曾经是一个选项,但它不再受支持,而且无论如何它只是完整 COM API 的一个相当小的子集。
首先,在不同的 dll 文件中编写 C++ 部分并不意味着它不能与 C# 项目采用相同的解决方案。
为了使用本机 DX 在托管窗口上呈现,您需要将 HWND 窗口 ID(使用 form.WindowId.ToInt32)传递给 C++ D3Ddevice c'tor。之后,每次您使用该设备进行渲染时,它都会在 .NET 窗口上渲染。
为此,您可能需要两个单独的项目——一个 C++ dll 和 .NET 项目。使用 COM 包装器或 p-invoke 将 HWND 传递给 C++ dll。