Thursday, November 30, 2006

C++: Visual C++ 2005 Express Edition

Visual C++ 2005 Express Edition is a free IDE and compiler offered by microsoft. It has limitations (no resource editor, no MFC) but you can build command line apps with it ok. They strip out a lot of stuff but you can install the free Microsoft Platform SDK to enable more features for Visual C++ 2005 Express. Then depending on what you're programming you may want the .NET Framework SDK 2.0 (x86).

download links

After installing these, you need to make the Visual C++ Express able to see the Platform SDK libraries.
go to Tools > Options > Projects and Solutions > VC++ Directories and set the following:
Executable files: C:\Program Files\MS_Platform_SDK\Bin
Include files: C:\Program Files\MS_Platform_SDK\Include
Library files: C:\Program Files\MS_Platform_SDK\Lib
Note: depending on where you installed the platform sdk you may have to use "Microsoft Platform SDK for Windows Server 2003 R2" as "MS_Platform_SDK" above.

Then, you need to modify some default settings in your projects. Edit the corewin_express.vsprops file in
C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults and add the following to AdditionalDependencies: " user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib"

You can enable a windowed template in the Visual Studio Express:
Edit the file AppSettings.htm in
C:\Program Files\Microsoft Visual Studio 8\
in subfolder \VC\VCWizards\AppWiz\Generic\Application\html\1033\ and comment out the following 4 lines (approx line 440)
// WIN_APP.disabled = true;
// WIN_APP_LABEL.disabled = true;
// DLL_APP.disabled = true;
// DLL_APP_LABEL.disabled = true;

Then when go to build an application choose a Win32 Console Application. In the Win32 Application Wizard dialog box, make sure that Windows application is selected as the Application type and the ATL is not selected. (before you edited the AppSettings.htm file, this was disabled. Click the Finish button to generate the project.

This post is pretty much a regurgitation of the following link. So for more information go check it out. I originally had this post for x64 and x86 but decided to split. This one was the x86 so go check out my other x64 post.


Tuesday, November 28, 2006

C++: Read-only member function

class MyClass
int _AsInteger;
const int &AsInteger;

MyClass() : _AsInteger(0), AsInteger(_AsInteger)

void SetDefault()
_AsInteger= 17;

MyClass obj1;
int a = obj1.AsInteger; //success
obj1.AsInteger= 1337; //compiler error
This way, you have a member that appears public but really isn't.

Monday, November 20, 2006

XML: Embed tags (other XML or HTML) in XML

Use CData to embed html or other xml in your xml