Doxygen is a cross platform open source code documentation tool which I’ve used for both Visual C++ and C# .NET projects. It produces awesome documentation and is very easy to use. Configuration is straight forward using DoxyWizard.
Doxygen can be configured to use Graphviz to produce call and dependency graphs. After installing Graphiz you’ll need to configure its path in DoxyWizard.
It supports multiple documentation conventions, the one I use most frequently is the XML Comments found in .NET. Here is a snippet from a C++ header file:
/// <summary>
/// Creates a Command which will get the last auto-generated Id in a table.
/// Note: Client is responsible for deleting the command.
/// <summary>
/// <param name="table">The name of the database table.</param>
/// <returns>A pointer to a Command.</returns>
/// <exception cref="DataException">Thrown if the table is empty.</exception>
Command * CreateGetLastIdCommand(const std::string & table);
Which produces the following documentation:

For more information on .NET XML Comments, see the official site.