Trying to run dxdiag for testing DirectPlay , get a read at 0x0 in CoCreateInstance at line 1355 (dlls/ole32/compobj.c):
1355 hres = IClassFactory_CreateInstance(lpclf, pUnkOuter, iid, ppv);
This cant work since lpcf is always 0 and this function is defined as a macro in include/unknwn.h :
./include/unknwn.h:160:#define IClassFactory_CreateInstance(p,a,b,c) (p)->lpVtbl->CreateInstance(p,a,b,c)
Should we rewrite this as a function or is lpclf assumed to be non NULL ?
===== Sylvain Petreolle (spetreolle at users dot sourceforge dot net) ICQ #170597259 No more War !
"What if tomorrow the War could be over ?" Morpheus, in "Reloaded".
For the Law of Oil and Fire, Im an European that lives in France. For all my Brothers and friends, Im a human living on Earth.
___________________________________________________________ Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français ! Yahoo! Mail : http://fr.mail.yahoo.com
man, 05.05.2003 kl. 01.22 skrev Sylvain Petreolle:
Trying to run dxdiag for testing DirectPlay , get a read at 0x0 in CoCreateInstance at line 1355 (dlls/ole32/compobj.c):
1355 hres = IClassFactory_CreateInstance(lpclf, pUnkOuter, iid, ppv);
This cant work since lpcf is always 0 and this function is defined as a macro in include/unknwn.h :
Why not check why it's "always 0" for you, instead of complaining that it is? If the CoGetClassObject call can't obtain the class factory, it's usually because the registry entries are missing, incorrect, or the referenced dll can't be loaded, but then it should have returned a failure, and CoCreateInstance should then bail out before getting to this point. You could also find out why it didn't, then?
Sorry, I didnt notice that lpclf is the variables that receives the pointer.
Why not check why it's "always 0" for you, instead of complaining that it is? If the CoGetClassObject call can't obtain the class factory, it's usually because the registry entries are missing, incorrect, or the referenced dll can't be loaded, but then it should have returned a failure, and CoCreateInstance should then bail out before getting to this point. You could also find out why it didn't, then?
Yes, found it. The problem isnt in the macro. :) We should add a check in the case no class factory is found, to avoid crashing. But I dont understand why CoGetClassObject returns ok and leaves lpclf set to NULL. Adding a TRACE after CoGetClassObject I get : trace:ole:CoCreateInstance sanity check: hres=80040154, lpclf=00000000 trace:ole:CoCreateInstance sanity check: hres=00000000, lpclf=41fb14e4 trace:ole:CoCreateInstance sanity check: hres=80040154, lpclf=00000000 trace:ole:CoCreateInstance sanity check: hres=00000000, lpclf=40289148 trace:ole:CoCreateInstance sanity check: hres=00000000, lpclf=4029b7f8 trace:ole:CoCreateInstance sanity check: hres=00000000, lpclf=4029b830 trace:ole:CoCreateInstance sanity check: hres=00000000, lpclf=4029b668 trace:ole:CoCreateInstance sanity check: hres=00000000, lpclf=00000000 <= shouldnt happen.
===== Sylvain Petreolle (spetreolle at users dot sourceforge dot net) ICQ #170597259 No more War !
"What if tomorrow the War could be over ?" Morpheus, in "Reloaded".
For the Law of Oil and Fire, Im an European that lives in France. For all my Brothers and friends, Im a human living on Earth.
___________________________________________________________ Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français ! Yahoo! Mail : http://fr.mail.yahoo.com
On Mon, May 05, 2003 at 07:09:07AM +0200, Sylvain Petreolle wrote:
Sorry, I didnt notice that lpclf is the variables that receives the pointer.
Why not check why it's "always 0" for you, instead of complaining that it is? If the CoGetClassObject call can't obtain the class factory, it's usually because the registry entries are missing, incorrect, or the referenced dll can't be loaded, but then it should have returned a failure, and CoCreateInstance should then bail out before getting to this point. You could also find out why it didn't, then?
Yes, found it. The problem isnt in the macro. :) We should add a check in the case no class factory is found, to avoid crashing. But I dont understand why CoGetClassObject returns ok and leaves lpclf set to NULL. Adding a TRACE after CoGetClassObject I get :
...
trace:ole:CoCreateInstance sanity check: hres=00000000, lpclf=00000000 <= shouldnt happen.
Who is returning this hres 0x0 value? Which dll? Whoever it is, it is broken.
Ciao, Marcus
This is ole32.CoGetClassObject. End of wine dxdiag --debugmsg +ole before the crash :
trace:ole:WINE_StringFromCLSID 0x40771b60->{963AB779-16A1-477C-A36D-CB5E711938F7} trace:ole:CoGetClassObject CLSID: {963ab779-16a1-477c-a36d-cb5e711938f7}, IID: {00000001-0000-0000-c000-000000000046} trace:ole:COMPOBJ_DLLList_Add fixme:dpnhpast:DPNHPAST_DllGetClassObject :stub trace:ole:CoCreateInstance sanity check: hres=00000000, lpclf=00000000 wine: Unhandled exception, starting debugger...
But I dont understand why CoGetClassObject returns ok and leaves
lpclf
set to NULL. Adding a TRACE after CoGetClassObject I get :
...
trace:ole:CoCreateInstance sanity check: hres=00000000,
lpclf=00000000
<= shouldnt happen.
Who is returning this hres 0x0 value? Which dll? Whoever it is, it is broken.
===== Sylvain Petreolle (spetreolle at users dot sourceforge dot net) ICQ #170597259 No more War !
"What if tomorrow the War could be over ?" Morpheus, in "Reloaded".
For the Law of Oil and Fire, Im an European that lives in France. For all my Brothers and friends, Im a human living on Earth.
___________________________________________________________ Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français ! Yahoo! Mail : http://fr.mail.yahoo.com