Archived Forum Post

Index of archived forum posts

Question:

error 429 ActiveX component cannot create object

Jun 18 '14 at 12:07

How can I fix this error?

Error 429 ActiveX component cannot create object.


Answer

ActiveX DLL registration and object instantiation problems never end. People have been having problems with ActiveX registration and object instantiation for over 10 years, and I expect that this will continue forever.

The problems are not specific to Chilkat ActiveX's. Skilled and competent people have trouble with ActiveX's in general.

First.. Chilkat ActiveX's are completely standard, plain-vanilla, nothing-special-about-them, typical self-registering ActiveX DLLs, so any trouble you may have with the Chilkat ActiveX is likely to be the same for any other ActiveX.

Successfully registering an ActiveX DLL and using it is simply a matter of following instructions carefully and getting things right. Microsoft has created innumerable pitfalls to make this as painful as possible, with the pain increasing as each year progresses.

All of this pain and suffering is the result of wanting to accomplish one simple thing at application runtime: Your program will instantiate an instance of an object (that is contained within an ActiveX DLL), and it will instantiate it using a name, such as "CompanyAbc.Widget".

Whatever programming language you are using, and whatever the syntax may be, it boils down to this:

  1. Using the name to find the path to the ActiveX DLL file.
  2. Loading it and dynamically linking it into your application's address space.

To find the location of the ActiveX DLL, the CreateObject statement (or whatever it may be in your programming language) looks in the Window Registry to find the entry by name, such as for "CompanyAbc.Widget". The registry entry will contain the path to the DLL.

That's step #1 -- to get the path to the DLL. This is the main goal of registering the ActiveX DLL via regsvr32. The potential pitfalls in this step are:

  1. Do you have permission to write to the registry?
  2. If it is 64-bit Windows, you must realize that there are 2 separate Windows Registries: a 32-bit registry and a 64-bit registry. If registering a 32-bit ActiveX DLL, make sure it gets registered in the 32-bit registry, and if registering a 64-bit DLL, make sure it gets registered in the 64-bit registry.

Carefully follow the steps at http://www.chilkatsoft.com/downloads_ActiveX.asp to register the Chilkat ActiveX DLL. Be careful not to mistakenly register the 32-bit DLL in the 64-bit registry or vice-versa.

Where should the ActiveX DLL be located in the filesystem? It can be anywhere, but do not move the DLL once it's been registered. If you do this, then the registry entry is pointing to a path where the DLL no longer exists -- and obviously the CreateObject statement will fail.

Also, do not put the DLL on a non-local filesystem. It must be on the local filesystem such that it's implicitly trusted.

Now that the ActiveX DLL is registered correctly, the next step is to use it at runtime. The 1st time your app tries to instantiate an instance of an object contained within the DLL will cause the DLL to be located, loaded into memory, and dynamically linked into your process's address space. Here's what needs to be correct:

  1. You must use the correct name in the CreateObject statement (or whatever syntax is used by your programming language). Chilkat documents the ActiveX object names (i.e. what must be passed to CreateObject) in the online reference documentation for each object. For example, see http://www.chilkatsoft.com/refdoc/xChilkatHttpRef.html
  2. If your app is running on 64-bit Windows, you still need to know whether your app is running as a 32-bit process or a 64-bit process. You should have registered the DLL that matches your application (32-bit or 64-bit). For older programming languages, such as VB6 or FoxPro, it will always be 32-bit because these languages existed before 64-bit Windows ever existed. For newer programming environments, you'll need to know. (Remember, DLL stands for Dynamic Link Library -- Windows is dynamically linking the binary object code within the DLL into your app's binary executable code that is in memory -- and the size of memory pointers (4 bytes or 8 bytes) must match.) If you really don't know whether your app is 32-bit or 64-bit, you can cover all your bases by registering both the 32-bit DLL and the 64-bit DLL. This is possible because each is registered to it's own registry. (At runtime, an application is only aware of a single registry -- the one that matches the size of it's address space. A 32-bit app, implicitly accesses the 32-bit registry, and a 64-bit app implicitly accesses the 64-bit registry.)

In summary:

If the regsvr32 registration is done correctly, if the DLL is located on a local hard drive and hasn't been moved, and if the application is using the correct name for CreateObject, then all should be OK.

Any single mistake will result in a typical unintelligible Microsoft runtime error.

One More Item of Importance

The Chilkat ActiveX DLLs are implemented in C++ and are built using Visual Studio 2008 (VC++ 9.0). This means the VC++ 9.0 runtime libs must be present on the computer where your app runs. The VC++ 9.0 runtime is typically already pre-installed on Windows computers, but for older computers it may not exist. If not, then you'll receive an "application configuration is incorrect" error. To fix, download and install the VC9 redist from here:

(64-bit) http://www.microsoft.com/en-us/download/details.aspx?id=15336

(32-bit) http://www.microsoft.com/en-us/download/details.aspx?id=29

(Chilkat builds using Visual Studio 2008 because it is the oldest possible Visual Studio that satisfies certain Windows security/compliance type certifications. The older the VC++ runtime, the less likely you'll find a computer that doesn't already have it pre-installed. For example, if Chilkat built with VS2013, then many more computers would not already have the runtime already present.)