To work with AQTime from managed code, add a reference to the AQTime library to your project:
-
Select Project > Add Reference from the main menu of Visual Studio. This will call the Add Reference dialog.
-
In this dialog:
-
Switch to the COM tabbed page.
-
Find SmartBear AQTime Library (TypeLib Version: 8.0) in the list of available components.
-
Choose this library in the list and click the Select button. The library will appear in the Selected Components list.
-
Press OK to close the dialog and save your changes.
-
After you added the reference, you will have access to AQTime’s interfaces. You can automate AQTime through both IntegrationManager
and Manager
objects (see Working With AQTime via COM - Overview).
The following code demonstrates using of AQTime’s IntegrationManager
via COM :
C#
using AQTime;
using System.Runtime.InteropServices;
...
private void AutomateAQtime()
{
const string AQtimeProgID = "AQtime.AQtime.8";
object AQtimeObject = null;
object aParamValue = null;
// Obtains access to AQTime
try
{
AQtimeObject = Marshal.GetActiveObject(AQtimeProgID);
}
catch
{
try
{
AQtimeObject = Activator.CreateInstance(Type.GetTypeFromProgID(AQtimeProgID));
}
catch
{
}
}
if (AQtimeObject == null) return;
// Obtains IAQtimeManager
AQtime.IAQtimeManager AQtimeManager = (AQtime.IAQtimeManager)AQtimeObject;
// Obtains IntegrationManager
AQtime.IaqTimeIntegrationSupportManager IntegrationManager = AQtimeManager.IntegrationManager;
// We have a reference to the integration manager.
// Now we can use its methods and properties to automate AQTime.
// Loads the project
if (!IntegrationManager.OpenProject("C:\\Work\\MyVCApp\\Debug\\MyVCApp.aqt"))
System.Windows.Forms.MessageBox.Show("Cannot open the specified project.");
else
{
// Selects the desired profiler
if (!IntegrationManager.SelectProfiler("Allocation Profiler"))
System.Windows.Forms.MessageBox.Show("The specified profiler was not found.");
else
{
// Obtains aqTimeIntegrationRunMode object for the "Normal" profiling mode
AQtime.IaqTimeIntegrationRunMode RunMode = IntegrationManager.GetRunMode(4);
aParamValue = null;
// Gets the "Work Directory" parameter
aParamValue = RunMode.GetParameterValue(2);
// If the parameter is empty assigns a value
if (aParamValue == null) RunMode.SetParameterValue(2, "C:\\Work");
// Selects "Normal" profiling mode
IntegrationManager.SelectRunMode("Normal");
// Adds new module to AQTime project
IntegrationManager.AddModule("C:\\Work\\MyApp.exe");
// Starts profiling and saves results to xml files
IntegrationManager.Start("C:\\SummaryResults.xml", "C:\\ProfilingResults.xml");
// Waits until profiling is over
while (IntegrationManager.ProfilingStarted)
Application.DoEvents();
// Removes previously added module
IntegrationManager.RemoveModule("C:\\Work\\MyApp.exe");
}
}
// Closes AQTime
AQtimeManager.Quit();
// Releases COM objects
Marshal.ReleaseComObject(IntegrationManager);
Marshal.ReleaseComObject(AQtimeManager);
Marshal.ReleaseComObject(AQtimeObject);
}
Please pay attention to the last three lines. They call the Marshal.ReleaseCOMObject
method to release all the objects that we referred to in our code. Make sure that you call this method and release the objects. Else, the work with AQTime will not be finished properly and the next attempt to automate AQTime will fail.
See Also
Automating AQTime
Working With AQTime via COM
Working With AQTime via COM - Overview
IaqTimeIntegrationSupportManager Object