When do I need the Windows SDK and what is .NET for?

When would I need the Windows SDK over just the regular API?

The SDK includes headers, libraries, tools, etc., that give you access to the API (and to .NET, for that matter). For example, a typical API-based program will start with #include <windows.h> -- but without the SDK, you don't have a copy of Windows.h to include. Likewise, the SDK includes the compilers (the same actual compilers included in the current version of Visual C++), linkers, debuggers, etc., necessary to actually build an API-based program.

And what is .NET and why would I need it?

.NET is a couple of things: a virtual machine that executes code in what Microsoft calls "intermediate language" (IL). It's also a (large) library of code in IL for everything from window management and drawing to communications, system management, etc.

You'd need it primarily if you were writing code in a .NET-based language such as C#, VB.NET, etc.

What is so special about C# and should I use that over C/C++?

C# is (by far) the preferred language for .NET development. Microsoft did develop .NET versions of Visual BASIC, and something at least quite similar to C++, but both tend to lag behind C# (at best).

So, if you're developing code specifically for Windows (especially if it includes a GUI), C# is probably your first choice. Microsoft does a lot more to support it than to support C or C++. That shows up in better support in both libraries and tooling.

The primary argument in favor of using C or C++ would probably be that you're developing primarily for Linux, and then porting the code to Windows. You can still do such development in C# if you want to (e.g., you can run C# and .NET under Linux using Mono), but especially if you're doing the development work under Linux, you lose most of the advantages.

On the other hand, if your code doesn't involve a GUI anyway, you might be able to write portable C or C++, and just compile it under both Windows and Linux. In such a case, using C# could involve extra work, such as having to install Mono to run the code under Linux--not a terribly difficult task, but even a fairly easy installation can be more work than no installation at all.

Tags:

C#

.Net

C++

C

Winapi