A 64-bit Windows system has two separate registries — one for 32-bit processes, and one for 64-bit processes. The reason for this is simple: Let’s say your application instantiates an instance of an ActiveX component by calling CreateObject(“Chilkat.Ssh”). If your application is running in a 32-bit address space, the registry entries for “Chilkat.Ssh” should point to a 32-bit DLL in the filesystem. However, if your application is running in a 64-bit address space, the registry entries should point to a 64-bit DLL. The only possible way to do it is to have separate registries — one for 32-bit and one for 64-bit.

On a Windows 64-bit computer, the regsvr32 program (located in \windows\system32) is a 64-bit program that registers a 64-bit ActiveX DLL using the 64-bit registry. For example:

regsvr32 ChilkatSsh_x64.dll

On Windows x64, regsvr32 expects a 64-bit DLL and updates the 64-bit registry.

To register a 32-bit ActiveX DLL in the 32-bit registry, you’ll need to run the regsvr32 located in \windows\syswow32. For example:

cd \windows\syswow64
regsvr32 c:\ChilkatSsh.dll

It’s important to know whether the program that will be loading the ActiveX is 32-bit or 64-bit. For example, IIS on Windows 64-bit can run as either. If IIS is running in 32-bit mode, any ActiveX’s used in your ASP pages should be 32-bit DLL’s registered in the 32-bit registry. Likewise for 64-bit.

The same conditions apply for other environments, such as SQL Server 2008. Is the database server running as a 32-bit process or 64-bit process? If an ActiveX is used within a stored procedure, make sure the appropriate DLL is registered to the appropriate registry…