Re: Queryinterface then Release fails
"Giovanni Dicanio" <giovanni.dicanio@invalid.it> wrote in message
news:%23$8qpjrIIHA.1168@TK2MSFTNGP02.phx.gbl...
"Fred" <not@here.com> ha scritto nel messaggio
news:zOKdnWz7_a43J67anZ2dneKdnZydnZ2d@pipex.net...
What part of my code would you like to see? :)
No need your guess was correct.!
I'm glad.
then I look at the imageInfo (for fun :) ) and it fails!!!!
hr=pImage->GetImageInfo(&imageInfo);
What value of HRESUL do you get?
IImage::GetImageInfo
http://msdn2.microsoft.com/en-us/library/aa452166.aspx
The same code works if I do it in the thread repeatedly - but fails in
the main thread.
I have CoInitializeEx(0, COINIT_MULTITHREADED);
once in the main thread.
Have you tried COINIT_APARTMENTTHREADED ?
i.e.
CoInitializeEx(
NULL,
COINIT_APARTMENTTHREADED
);
You may have some problems of concurrency with the multi-threaded model of
COINIT_MULTITHREADED; if you use multi-threaded model, you should provide
your own synchronization mechanisms e.g. typically using Win32 primitives
like critical sections, semaphores, etc.
Instead, if you use the apartment-threaded model
(COINIT_APARTMENTTHREADED) you can still have multi-threading, but COM
offers its own synchronization (serializing calls to methods of objects).
Hmm - NO SDK examples have COINIT_APARTMENTTHREADED and when I tried to use
it I got E_FAIL returned from CoInitializeEx.
But hunting around I found this text in an SDK Imaging demo
// Normally you would only call CoInitialize/CoUninitialize
// once per thread. This sample calls CoInitialize in this
// draw function simply to illustrate that you must call
// CoInitialize before calling CoCreateInstance.
CoInitializeEx(NULL, COINIT_MULTITHREADED);
// Create the imaging factory.
if (SUCCEEDED(CoCreateInstance (CLSID_ImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IImagingFactory,
(void **)&pImgFactory)))
{...
So I do just that creating it once per thread. And.......
It still fails, so I put a
CoInitializeEx(NULL, COINIT_MULTITHREADED);
CoUninitialize ();
pair around everywhere I CoCreateInstance (CLSID_ImagingFactory
And.......
It sometimes works sometimes doesn't.
so I imagine it *is* something to do with the threading. But......
The hr is
hr -2147467259 {E_FAIL}
The debuuger error I get back when it fails is:
GetImageInfo fails//my text
RaiseException: Thread=9665e4c0 Proc=815875b0 'SP1.exe'
AKY=00200001 PC=03f785b4(coredll.dll+0x000185b4)
RA=800773f4(NK.EXE+0x000073f4) BVA=00000000 FSR=00000000
Hummpphh!!!