<HTML>
	<HEAD>
		<TITLE>Using SDL with Microsoft Visual C++</TITLE>
	</HEAD>
	<BODY>
		<H1>
			Using SDL with Microsoft Visual C++ 5,6&nbsp;and 7
		</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 VC++ file "<CODE>SDL.dsw</CODE>" <STRONG><FONT color="#009900">("<CODE>SDL.sln</CODE>")</FONT></STRONG>. This should open up the IDE.
		</P>
		<P>
			You may be prompted at this point to upgrade the workspace, should you be using 
			a more recent version of Visual C++. If so, allow the workspace to be upgraded.
		</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>
			If you get an error about SDL_config.h being missing, you should
			copy include/SDL_config.h.default to include/SDL_config.h and try again.
		</P>
		<P>
			You may get a few warnings, but you should not get any errors. You do have to 
			have at least the DirectX 5 SDK installed, however. The latest 
			version of DirectX can be downloaded or purchased on a cheap CD (my 
			recommendation) 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> SDL.dll</li>
    <li> SDL.lib</li>
    <li> SDLmain.lib</li>
    </ul>
		<P>
			Search for these using the Windows Find (Windows-F) utility, if you don't 
			already know where they should be. For those of you with a clue, look inside 
			the Debug or Release directories of the subdirectories of the Project folder. 
			(It might be easier to just use Windows Find if this sounds confusing. And 
			don't worry about needing a clue; we all need visits from the clue fairy 
			frequently.)
		</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 (ex. If you installed to 
					c:\SDL-1.2.5\ add c:\SDL-1.2.5\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> SDL.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> SDL.lib </li>
     <li> SDLmain.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 (eg. 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: <CODE>
				<PRE>
#include "SDL.h"

int main( int argc, char* argv[] )
{
  // Body of the program goes here.
  return 0;
}
</PRE>
			</CODE>
		<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>
