2

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

我已经阅读了将 C++ 写入本机 dll 的方法,但是最好能够将 C++ 项目包含在解决方案中(我什至不知道这是否可能)。不管怎样,如果您知道一些有用的步骤、提示,或者这通常是个坏主意,请告诉我。谢谢!

4

3 回答 3

3

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

于 2008-11-05T20:26:17.300 回答
1

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

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

为此,您可能需要两个单独的项目——一个 C++ dll 和 .NET 项目。使用 COM 包装器或 p-invoke 将 HWND 传递给 C++ dll。

于 2008-11-05T20:23:08.507 回答
1

如果你不想花太多时间为 DirectX 编写 C++ 代码,你可以考虑使用 SlimDX,因为托管 DirectX 1.0 是不可能的,因为 2.0 永远不会离开测试版,后来用 XNA 替换它有很大的不同来自 DirectX 本身,并要求您安装 XNA Game Studio

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

SlimDX

托管 DirectX

于 2008-11-06T06:07:59.060 回答