I've isolated my code to just this - running it results in a small memory leak. Can anyone see why?
HRESULT hResult = CoInitialize(NULL);
if ((hResult != S_OK) && (hResult != S_FALSE))
return;
_ConnectionPtr conn;
hResult = conn.CreateInstance(__uuidof(Connection));
if (hResult != S_OK)
{
CoUninitialize();
return;
}
conn->CursorLocation = adUseClient;
conn->Open(sConnectionString, L"", L"", adConnectUnspecified);
if (conn)
{
conn->Close();
conn.Release();
conn=NULL;
}
CoUninitialize();
return;
This is the sConnectionString, though I can't see anything that would cause memory to leak from the conn object:
"Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source="C:\Temp\acctprod.sdf"; ssce:database password='password';"
Using CoInitializeEx with COINIT_MULTITHREADED instead of just CoInitialize fixed the leak. But I'm not sure when/why to use COINIT_MULTITHREADED or COINIT_APARTMENTTHREADED?