2008-11-05 69 views
2

我在管理環境中運行directX應用程序(C++)時遇到了一個問題。我試圖編寫一個MDI工具(用C#),其中父窗口的背景將是directX(C++)的嵌入式渲染窗口。將非託管directX嵌入到C#表格

我已經閱讀了將C++寫入本地dll的方法,但是最好能夠將C++項目包含在解決方案中(我甚至不知道這是否可行)。無論如何,如果你知道一些有用的步驟,提示,或者如果這是一個不好的主意,請讓我知道。謝謝!

回答

3

最簡單的方法是將C++/CLI項目添加到解決方案中。這將使您能夠直接使用DirectX COM接口並創建一個託管包裝器,這很容易從您的C#代碼調用。我已經採取了這種方法幾次,這是迄今爲止我嘗試過的混合DirectX和.Net最簡單的方法。受管理的DirectX曾經是一個選項,但它不再被支持,它仍然是整個COM API的一小部分。

1

首先將C++部分寫入不同的dll文件並不意味着它不能與C#項目處於同一解決方案。

爲了使用本機DX在託管窗口上呈現,您需要將HWND窗口標識(使用form.WindowId.ToInt32)傳遞給C++ D3Ddevice c'tor。之後,每次使用該設備進行渲染時,它都會在.NET窗口上渲染。

要做到這一點,你可能需要兩個分離的項目 - 一個C++ dll & .NET項目。使用COM包裝器或p-invoke將HWND傳遞給C++ dll。

1

如果您不想花費太多時間編寫DirectX的C++代碼,則可以考慮使用 SlimDX,因爲受管DirectX 1.0不可行,因爲2.0從未離開測試版,後來用XNA與DirectX本身有很大不同,並且需要您安裝XNA Game Studio

SlimDX是managed directx的開源版本,它具有略微不同的API和內部結構,但易於使用。最近發佈的版本非常穩定。我目前正在使用它來編寫一個生產應用程序。

SlimDX

Managed DirectX