Hi, I have just put together a very quick console program to illustrate my point. I am doing alot of heavy COM programming, and I need to be able to check for memory leaks. Currently, I have been using the CRT debug heap functions. However, they do not give any memory leaks when I do not release COM resources:
Code:
#include <iostream>
#include <tchar.h>
#define _WIN32_WINNT 0x0400
#include <tapi3.h>
#include <objbase.h>
/*For memory checking*/
#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
ITTAPI *m_IpTapi = NULL;
IEnumAddress *pIEnumAddress = NULL;
hr = CoCreateInstance(CLSID_TAPI, NULL, CLSCTX_INPROC_SERVER, IID_ITTAPI, (LPVOID *)&m_IpTapi);
if(FAILED(hr)) cout << "Error: " << hr;
hr = m_IpTapi->Initialize();
if(FAILED(hr)) cout << "Error: " << hr;
hr = m_IpTapi->EnumerateAddresses(&pIEnumAddress);
if(FAILED(hr)) cout << "Error: " << hr;
/*
Here I should do
pIEnumAddress->Release();
pIEnumAddress = NULL
if(m_IpTapi != NULL)
{
m_IpTapi->Shutdown();
m_IpTapi->Release();
m_IpTapi = NULL;
}
Release COM based resources
CoUninitialize();
*/
_CrtDumpMemoryLeaks();
return 0;
}
Is there any method within Visual Studio 2003, or MFC classes that would allow me to check for COM resource leaks?
Thanks