I'm working on an application developed for Windows XP SP3, using VB6. I'm currently in the process of getting it to work on Windows 7, but am encountering a problem with one of our custom OCX files.
When attempting to load a form that contains an instance of the control contained in the problem OCX, the following error is produced:
Failed to load control 'x' from y.ocx. Your version of y.ocx may be outdated. Make sure you are using the version of the control that was provided with your application.
I've checked the version numbers and they're all correct and referencing the proper version. The OCX registers fine, and all the expected registry entries are present.
Inspection with DependencyWalker shows no missing dependencies.
The software works fine under XP, and this is (seemingly) the only issue when running on Windows 7.
Interestingly, if I run through the VB6 IDE using a VB6 group (with the offending OCX part of the group, and the application the startup project), I don't have the issue. Running the application on it's own through the IDE still presents the error.
Any ideas on what could be missing which would cause the application to throw this error?
Error occurs on both Windows 7 Professional and Home Professional, both 32 bit.
This is almost certainly an interface compatibility problem. COM interfaces are versioned entirely separately from your Major/Minor/Revision numbers, which are little more than comments except as used by Installer.
Somewhere along the line you broke binary compatibility, and you are trying to deploy a library with a newer interface than your application was compiled against.
These version numbers are found in keys such as:
HKEY_CLASSES_ROOT\CLSID\{class Id GUID}\VERSION
Your program needs to have its old reference to the OCX removed, a new one set, and then it must be recompiled. This also means deleting any instances of the control and adding them back one by one.
I doubt this is a Windows 7 issue.
I would suspect this is a UAC problem. Try turning UAC off to see if that solves the immediate issue. If it does then you have to regsiter everything using 'run as administrator' and/or create a manifest for you application.
Sounds like on of the controls included in your OCX is having issues loading, not a general registration error. Look at the constructors for x control, and see if they are doing anything that disagrees with UAC or such. One way you can debug this is put some kind of a break before the control is initialized, and debug the application from Visual Studio (remember to create the PDB's in VB6), and then carry on from the break to see why the control isn't initializing.
Related
On some systems windows 7/8 my vb6 application gets the msinet error 339.
Component ‘MSINET.OCX’ or one of its dependencies not correctly registered: a file is missing or invalid.
I'm wondering if I need that ocx.
How can I tell if I am using the msinet.ocx? And whether I need it?
I notice Microsoft Internet Controls checked as a component and also Microsoft Internet Transfer Control 6.0 (SP6). Are either of these MSInet.ocx?
Microsoft Internet Transfer Control 6.0 (SP6). Load the OCX as a reference by filename and it tell you it's name.
Rebuild the setup program, msinet is normally included if used.
Registration issues can also crop up relating to Internet Explorer 10. If the OCX is present on the systems in question but seemingly not registered, then the solution can be to uninstall IE 10 (normally best to remove all versions of IE that Windows will let you - they're found under Windows Updates, rather than programs, incidentally). After removing these versions, you are free to reinstall the latest version of IE.
I'm trying to deploy some Vb6 components on a Windows Server 2003 Standard x64 R2. I normally run these in a com+ application and I went through the normal routine of creating the COM+ application and adding all the components. Everything seemed to work fine until I actually tried to use any of the components. I would some kind of "ActiveX component can't create object" or "Application-defined or object-defined error" or something similar to that.
To remove as many variables a possible I created a very simple VB form to consume the simpliest of the components and tried that. Nope. So I created a simple install to install the component, and whooo hoooo it worked. So I tried one of the more envolved components with high hopes ... but no after the install I still can't call the component successfully. Using Dependency Walker I discovered that for some reason the msvbvm60.dll is not properly registerd.
I've downloaded VBRUN60.exe and VBRUN60SP6.exe and tried installing them. Even going so far as to do a run as with the administrator account and removing the check box for "Run this program with restricted access". I've tried to manually register the msvbvm60.dll in the SysWow64 directory.
Nothing seems to work. It just won't register. Does anybody have any suggestions? At this point I'll try just about anything.
Thanks
If you are registering the components manually you need to pay extra attention. As you are on a 64-bit OS there are two versions of regsvr32.exe. When registering VB6 components you must make sure to use the 32-bit version of regsvr32, which is located under the following location:
%WINDIR%\SysWOW64\regsvr32.exe
If you just type regsvr32 on the command prompt, normally the 64-bit version is chosen (because %WINDIR%\system32 is contained in the %PATH% environment variable), so please make sure to use the full path as above.
If you are using a 32-bit MSI to install your components, this version will be selected automatically and the registration should work just fine.
In case you haven't already done, you should give a try to Process Monitor - one of the best tools I have used on dll registering problems.
The following links will provide some usufull clues:
An excelent tutorial on using Process Monitor for problem solving;
ActiveX component can't create an object
RESOLVED! ActiveX Component Can't Create Object: Cube build failure against SQL Server 2005 Analysis Services
Hope it helps :D
I've had trouble with unregistered components for Visual Basic 6 - although not tried to use the same one as you are mentioning. Manually registering never resolved things, no matter which reg server was used
The problem (eventually) turns out to be Internet Explorer 10. Uninstalling that (due to the way Windows 7 handles IE as Windows updates, this meant unistalling newer versions first to expose the older ones) worked. Afterwards, reinstalling the latest IE brings no problem.
I'm adding some functionality to an old admin tool written in VB6. The tool uses a c++ activeX object. I haven't worked on the tool since I upgraded to windows 7 and now the active X object fails to load with the 429 "ActiveX component can't create object" error. I'm not knowledgeable about VB6 but I have registered the activex dll and type library and I can remove and add the object from the project via the project->references window (the program fails to compile when the reference is removed as expected). The VB6 ide is running in administrator mode and I get the same error if I run the exe directly as an administrator.
Has anyone else experienced a similar problem and found a way to sort it out?
Thanks,
Patrick
PS : I have also tried putting the dll in question in the working directory of the exe
EDIT: I've had no luck trying to sort this out and ended up remoting into a windows 2003 server to test the changes.
You might try using Mark Russinovich's regMon and FileMon to see exactly what files or regkeys are being requested during the load of that dll. That can often tell you if you've got a missing dependency.
Also the DEPENDS.EXE that comes with VS6 is sometimes good for that (though it doesn't necessarily get ALL the dependencies of a dll or exe).
COM is going to use the registry to map from the class name to the physical DLL file that has to be loaded.
Check the registry keys pertaining to your COM object... first under HKEY_CLASSES_ROOT, then the class name, which gets you the CLSID, then the HKEY_CLASSES_ROOT/CLSID section for the GUID of the object, and then see where the physical library lives.
A 429 could mean all sorts of different things. Many times, it means that there's a dependency missing, and the easiest way to figure out what dependency is missing is to use procmon to see what files/registry settings the app is trying to access and hopefully, catch where you get ACCESS_DENIED or FILE_NOT_FOUND or what have you.
The problem might also be with your browser. A couple weeks ago I upgraded my IE, since then I've had to make changes by opening IE, click tools, click custom, scroll to the activeX controls and enable, and/or click prompt. The same was needed for scripting and for me to use XMLHttprequest. Now everything is back to working, however the ActiveX warning alert sometimes takes over 2 minutes to pop-up, then when clicked everything works fine.
Do you have UAC enabled on that machine? Have you tried disabling it? I have seen some cases where it let ActiveX controls being registered but didn't let applications using them ran.
This is trouble shooting question.
Our application's development environment is VS2005 C/C++, VB6 based GUI.
we use also componentone for ActiveX control(vsflexgrid8).
application performed well in Windows XP, but in Windows 7, there is some problem in GUI.
rebuilded almost all C/C++ code and VB6 code in Windows 7
our build system is so poor and because I joined this team a month ago, building all codes are a bit hard
But this (maybe) last problem is not related to build, I think.
all other processes and GUI process are start well. but when click some menu in GUI, all user controls become invalid.
error message seems like this:
'-2147417848 (80010108)' occured
runtime error.
Automation error.
Invoked Object disconnected from
client.
above message is not identical to real message since real message is our native language(Korean).
when googling with this message, I'm able to gather some informations.
the most possible case is when using OLE Automation for Microsoft Office Objects.
But our GUI(VB6 developed) does not use Microsoft Office Objects.
And problem-causing page/control's are commonly use componentone modules.
So, if experienced similar problems, please help me.
In Virtual Machine Windows XP mode, there is no problem. But I'm strongly willing to develop in this environment.
Thank you for your help.
'Automation Error' just means that an error was raised from within the ActviveX control, but that the developpers did not add a description to it. So the cause could be anything.
A common source for this kind of errors are write errors to protected folder (The Program Files folder for instance) or forbidden Registry Read/Write actions. You could try installing the program to another location or to run it elevated.
Hope this helps at least a little.
As Dabbler says, this means there has been an error in the ActiveX component.
Does any of your C or C++ code run before this error happens?
Are you using the latest version of the ComponentOne control? Perhaps it's worth checking whether it is supported on Windows 7, and contacting their technical support?
You could debug the VB6 and C/C++ on Windows 7 to track down which bit of code triggers this problem. This is possible with Visual Studio 2005, which you say you have, or WinDbg which is free.
I solved this problem by Windows Updates.
Since about 20~30 updates are performed at once, I can't know what update solves this.
I guess Visual Studio 2005 security updates may the reason for this trouble.
Anyway, my application runs well in my Windows 7 machine.
Thanks to All.
Using VB6
i created a software in vb6 with xp operating system, In my system, software is working perfectly. When i run my software in other system(xp operating system), it showing error as cannot find project or library, showing error in Date, Left...,
Now i moved to vista operating system, i try to run my software, It showing the same error.
How to solve this issue.
My software is running in my system, when i try to run my software other system it showing error and also i try to run my software in vista also it showing a same error.
What happen in my code. There is any system32 file problem?
How to solve this issue.
Sounds like you need to create an installation for your VB6 project, to install the VB6 runtime and any non-standard components used. The runtime should be present by default on Vista, so it's probably non-standard components that are missing.
Consult the answers to your own previous question in August, when you asked how to make an installation for a VB6 program. (Even that August question was already a duplicate.)
You need to also copy the controls, and referenced files to the machine running your code. Some controls and referenced files will already be on the machine, but without experience you generally will not know which files are already installed. You can look at the checked files in the Project|References and Projects|Components dialogs to see what is included in your project. You will need to scroll through the components dialog to find all referenced files, but in the references dialog all the references are organized at the top. Also, to confirm what file(s) a machine is missing you can look at the Events log. An error with the missing file will be logged. A drawback of this approach is that you will only get one missing file at a time as the Application quits on the first missing reference encountered.
Also MarkJ and Konamiman are both correct in that the VB6 runtimes are required, although it is common for other VB6 programs to have already installed it. If you are not building in-house applications you do not want to take anything granted and should build a complete install for your application.
The other computers must have the VB6 runtime in order to run applications generated with VB6. Maybe is this the problem?
The VB6 runtime can be donwloaded from here: http://www.microsoft.com/downloads/details.aspx?FamilyID=bf9a24f9-b5c5-48f4-8edd-cdf2d29a79d5&displaylang=en
Use the Package and Deployment Wizard to create a setup.exe. The Wizard will automatically include all the files you might need for distribution.