DirectX and .NET (original) (raw)

With the DirectX SDK (June 2010) release and the addition of support for Visual Studio 2010, I’ve been seeing a lot of questions of the form:

How do I create a DirectX .NET application in Visual Studio 2010? I can’t find Microsoft.DirectX to add to my project but I have the DirectX SDK (June 2010) release installed.

As with many seemingly simple questions on a technical topic, this one is actually quite complex.

Back in the days of DirectX 7 and DirectX 8, there was support included for using DirectX from Visual Basic. While most developers used DirectX APIs via C and C++, there was intense interest in the hobbyist community to access this technology. Thus the focus on enabling Visual Basic developers. When working on DirectX 9, Visual Basic had become unified with the .NET family of languages and thus Managed DirectX 1.1 was created (with a great deal of individual passion and effort from Tom Miller and others on the DirectX team at the time). It was designed for the .NET 1.1 Runtime, and include managed wrappers for the whole family of DirectX technology: Direct3D 9, D3DX9, DXDIAG, DirectDraw, DirectInput, DirectPlay, DirectSound, and a simple wrapper for DirectShow. The focus shifted from the Visual Basic language to C#, although VB .NET could still be used.

Note: The DirectX 7 and 8 Visual Basic 6.0 support I mention here is no longer available as of Windows Vista. It was part of DirectX 9.0c and was included with Windows XP Service Pack 2&3, Windows Server 2003 Service Pack 1 & 2, and Windows XP Professional x64 Edition.

With the release of .NET 2.0, there was an effort to update Managed DirectX to use the new constructs and in 2005 there was a Managed DirectX 2.0 Beta included as part of the DirectX SDK. As this effort was underway, a major reorganization at Microsoft took place and when the dust settled, the relatively small team that had been working on this technology suddenly found themselves as the seed of an entirely new effort around .NET gaming development: XNA Game Studio. The Managed DirectX 2.0 project was shelved, and all the effort focused on this new more comprehensive end-to-end solution for the indie game developers targeting Windows, Xbox 360, Zune, and eventually Windows Phone 7.

Managed DirectX 1.1 as it stands today is deprecated. It was last updated in April 2006 to match that version of D3DX9, while the Managed DirectX 1.1 documentation was last updated in August 2005. The last DirectX SDK to include the samples and documentation for Managed DirectX 1.1 was August 2006. Since that time, we’ve continued to include the Managed DirectX 1.1 assemblies in the DirectX SDK Developer Runtime, the DirectSetup REDIST folder, the DirectX End-User Runtime package, and the DirectX End-User Runtime Web Installer to simplify legacy deployment and support existing applications that relied on it. This last support for Managed DirectX 1.1 deployment is likely to be removed in a future DirectX SDK update.

At this point, Managed DirectX 1.1 is really beginning to show it’s age.

The last bullet here is the heart of the issue I started out with in this post. The Visual Studio 2010 toolset only supports developing .NET 4.0 applications, and therefore Managed DirectX 1.1 as a .NET 1.1 technology is not supported by Visual Studio 2010. BTW, it is possible to use the Visual Studio 2010 IDE to build .NET 2.0 applications using older toolsets through multi-targeting, but this is really using legacy tools which do work with .NET 1.1 era assemblies.

One more challenge of trying to use the legacy Managed DirectX 1.1 assemblies is that they are only deployed by the legacy DirectSetup package. If you continue to use it, be sure to use the refreshed version of DXSETUP.

The modern version of the DirectX SDK is designed for C/C++ native developers. If you are looking for .NET solutions for using DirectX technology, there are many options available although the choice of solution depends on your specific needs:

If these solutions don’t work for you, you can always write your own managed wrapper using standard native interop constructs or use Managed C++/CLI to write the DirectX portion of your application in C/C++ using the DirectX SDK. The Windows Presentation Foundation D3DImage class can be a useful way to do this interop, although the use of Direct3D9Ex on Windows Vista and Windows 7 can cause some problems with components like D3DX9 which you should watch out for.

You should also look at GitHub

.NET 1.1 Framework: Note that the .NET 1.1 Framework is not supported on either Windows 7, Windows 8.x, or Windows 10.

Win2D: Another option to consider is ShawnHar’s latest project for using Direct2D/DirectWrite from C# or C++/CX. This is a Windows Runtime API projection for UWP, and includes WIC integration.