<HTML>
	<HEAD>
		<TITLE>Using SDL with Microsoft Visual C++</TITLE>
	</HEAD>
	<BODY>
		<H1>
			Using SDL with Microsoft Visual C++
		</H1>
		<H3>
			by <A HREF="mailto:snowlion@sprynet.com">Lion Kimbro </A>and additions by <A HREF="mailto:james@conceptofzero.net">
				James Turk</A>
		</H3>
		<p>
			You can either use the precompiled libraries from <A HREF="http://www.libsdl.org/download.php"> the SDL Download web site </A>, or you can build SDL yourself.
		</p>
		<H3>
			Building SDL
		</H3>
		<P>
			Go into the VisualC directory and double-click on the Visual Studio solution for your version of Visual Studio, e.g. <CODE>SDL_VS2008.sln</CODE> This should open up the IDE.
		</P>
		<P>
			There are different solution files for the various
			versions of the IDE. Please use the appropiate version
			2008, 2010, 2012 or 2013.
		</P>
		<P>
			Build the <CODE>.dll</CODE> and <CODE>.lib</CODE> files.
		</P>
		<P>
			This is done by right clicking on each project in turn (Projects are listed in 
			the Workspace panel in the FileView tab), and selecting "Build".
		</P>
		<P>
			You may get a few warnings, but you should not get any errors. You do have to 
			have at least the DirectX 9 SDK installed, however. The latest 
			version of DirectX can be downloaded from <A HREF="http://www.microsoft.com">Microsoft</A>.
		</P>
		<P>
			Later, we will refer to the following .lib and .dll files that have just been 
			generated:
		</P>
		<ul>
    <li> SDL2.dll</li>
    <li> SDL2.lib</li>
    <li> SDL2main.lib</li>
    </ul>
		<P>
			Search for these using the Windows Find (Windows-F) utility inside the VisualC directory.
		</P>
		<H3>
			Creating a Project with SDL
		</H3>
		<P>
			Create a project as a Win32 Application.
		</P>
		<P>
			Create a C++ file for your project.
		</P>
		<P>
			Set the C runtime to "Multi-threaded DLL" in the menu: <CODE>Project|Settings|C/C++ 
				tab|Code Generation|Runtime Library </CODE>.
		</P>
		<P>
			Add the SDL <CODE>include</CODE> directory to your list of includes in the 
			menu: <CODE>Project|Settings|C/C++ tab|Preprocessor|Additional include directories </CODE>
			.
			<br>
			<STRONG><FONT color="#009900">VC7 Specific: Instead of doing this I find it easier to 
					add the include and library directories to the list that VC7 keeps. Do this by 
					selecting Tools|Options|Projects|VC++ Directories and under the "Show 
					Directories For:" dropbox select "Include Files", and click the "New Directory 
					Icon" and add the [SDLROOT]\include directory (e.g. If you installed to 
					c:\SDL\ add c:\SDL\include).&nbsp;Proceed to&nbsp;change the 
					dropbox selection to "Library Files" and add [SDLROOT]\lib.</FONT></STRONG>
		</P>
			<P>
				The "include directory" I am referring to is the <CODE>include</CODE> folder 
				within the main SDL directory (the one that this HTML file located within).
			</P>
			<P>
				Now we're going to use the files that we had created earlier in the Build SDL 
				step.
			</P>
			<P>
				Copy the following files into your Project directory:
			</P>
			<ul>
     <li> SDL2.dll</li>
     </ul>
			<P>
				Add the following files to your project (It is not necessary to copy them to 
				your project directory):
			</P>
			<ul>
     <li> SDL2.lib </li>
     <li> SDL2main.lib</li>
     </ul>
			<P>
				(To add them to your project, right click on your project, and select "Add 
				files to project")
			</P>
		<P><STRONG><FONT color="#009900">Instead of adding the files to your project it is more 
					desireable to add them to the linker options: Project|Properties|Linker|Command 
					Line and type the names of the libraries to link with in the "Additional 
					Options:" box.&nbsp; Note: This must be done&nbsp;for&nbsp;each&nbsp;build 
					configuration (e.g. Release,Debug).</FONT></STRONG></P>
		<H3>
			SDL 101, First Day of Class
		</H3>
		<P>
			Now create the basic body of your project. The body of your program should take 
			the following form:
			<PRE><CODE>
#include "SDL.h"

int main( int argc, char* argv[] )
{
  // Body of the program goes here.
  return 0;
}
			</CODE></PRE>
		<P></P>
		<H3>
			That's it!
		</H3>
		<P>
			I hope that this document has helped you get through the most difficult part of 
			using the SDL: installing it. Suggestions for improvements to this document 
			should be sent to the writers of this document.
		</P>
		<P>
			Thanks to Paulus Esterhazy (pesterhazy@gmx.net), for the work on VC++ port.
		</P>
		<P>
			This document was originally called "VisualC.txt", and was written by <A HREF="mailto:slouken@libsdl.org">
				Sam Lantinga</A>.
		</P>
		<P>
			Later, it was converted to HTML and expanded into the document that you see 
			today by <A HREF="mailto:snowlion@sprynet.com">Lion Kimbro</A>.
		</P>
		<P>Minor Fixes and Visual C++ 7 Information (In Green) was added by <A HREF="mailto:james@conceptofzero.net">James Turk</A>
		</P>
	</BODY>
</HTML>
