VB6 - dreaded Unexpected error (32810) with Crystal Reports components
Posted on 2007-08-10
I am trying to use / compile a project that someone else in my company prepared. Binary Compatibility is set and I get the Unexpected error (32810) message. From reading that I have done on the Internet, I am under the definite impression that the problem is that I have something registered on my machine that has a different TypeLib signature than the one in the binary compatibility reference dll.
I think that this is not the FileSystemObject problem (It is used, but no part of it is used in the public properties/methods/types) Also if I un-register it, the error remains.
It seems to me that my problem is Crystal Reports components. I have noticed that when I run Debug, Step Into (which causes the message) under Process Monitor from Sysinternals, it shows that crviewer.dll (used as a component) is being read just before the error. The sequence seems to be read the typelib key from the registry, read the referenced file (crviewer) and throw the error.
The project also uses craxdrt.dll as a reference. Un-registering combinations of craxdrt and crviewer changes the errors that I see as follows:
1) Craxdrt registered and crviewer registered: Project loads OK, get Unexpected error (32810) when debug is attempted.
2) Craxdrt registered and crviewer un-registered: Loads with &.crviewer.dll could not be loaded Continue loading project? I answered Yes. Then Errors during load&. When you try the debug, User-defined type not defined
3) Craxdrt un-registered and crviewer registered: Project Loads with a could not create reference to &&.craxdrt.dll. When you try the debug, The binary compatibility DLL or EXE contains a parameter type or return type whose definition can not be found
4) Craxdrt un-registered and crviewer un-registered: Loads with &.crviewer.dll could not be loaded Continue loading project? I answered Yes. Then get could not create reference to &&.craxdrt.dll. Then Errors during load&. When you debug, you get the The binary compatibility DLL or EXE contains a parameter type or return type whose definition can not be found
So based on the fact that un-registering these can prevent the Unexpected error (32810) message, How do I find out the precise component that is causing this? The next question is if I can find another version of the offending component, how do I check to see if it is the right one? Just register it and try again? There must be some tool that can examine the binary compatible reference dll and the component in question to see if they are defined the same way.
Thanks for any pointers!