Re: CoCreateInstance() returns E_OUTOFMEMORY
"Bala L" <balasubramanian.l@gmail.com> wrote in message news:86d0cf9c-95a9-46fc-aba8-c14ee3b314fc@e4g2000hsg.googlegroups.com...
On Jan 31, 11:33 pm, "Brian Muth" <bm...@mvps.org> wrote:
"Bala L" <balasubramania...@gmail.com> wrote in messagenews:876b2d02-75f1-436f-8457-862411eb5877@v17g2000hsa.googlegroups.com...
I am trying to use a program developed by someone else to interface
with a camera using the SDK. This program runs fine on a particular
laptop, but not on any other machines.
The code tries to initialize the camera object through a function
exposed through a .dll file.
m_pVidControl = new CCameraCtl();
m_pVidControl->Initialize(640,480); // Unhandled exception causes
crash
The program crashes on the second line, and by stepping in to the code
in the .dll, I found the error in the CoCreateInstance() function
call.
int CCameraCtl::Initialize(int width, int height)
{
//init camera capture com
HRESULT hresult;
hresult = CoCreateInstance(CLSID_CDirectShowGrabber, NULL,
CLSCTX_INPROC_SERVER, IID_IFilter, (void **)&(m_pGrabber)); //
Returns out of memory error
// Rest of function
}
The m_pGrabber has a valid address when it enters the Initialize()
function, but is again being reset to NULL after this line.
It doesn't matter what the value is that m_pGrabber holds. CoCreateInstance() is supposed to overwrite that value anyway with a
valid interface pointer if CoCreateInstance() succeeeds.
Did you remember to call CoInitialize()?
Brian
Yes, CoInitialize() is called in the InitInstance(). If it wasn't
being called, then I would expect the program to fail on the other
computer as well. It runs fine on a single laptop, and fails on 2-3
other computers I've tried.
You haven't indicated whether the COM object is built on MFC or ATL. IIRC, the "out of memory" error for early versions of ATL was
misleading, and often occurred when the COM object (or the proxy-stub) wasn't registered properly. Is this an inproc or out-of-proc
COM object?
A good way of testing whether the object is properly registered is to use OLEVIEW and try to instantiate the object. Did you try
that?
Brian