Skip to main content
Uniface Support

Bitness Mismatches After Migration: How to Detect and Prevent Issues

  • November 20, 2025
  • 2 replies
  • 30 views

Julie Hohman
Forum|alt.badge.img

Bitness Mismatches After Migration: How to Detect and Prevent Issues

 

When migrating your Uniface environment—especially to new hardware or operating systems—you might encounter a common obstacle: bitness mismatches between Uniface and third-party components like DLLs or database clients (e.g., Oracle). These mismatches often happen when 32-bit and 64-bit components are mixed unintentionally, leading to errors that can be tricky to diagnose.

How Do You Know If Bitness Mismatch Is the Issue? Here are some typical symptoms that point to a bitness mismatch:

  • Uniface fails to start or crashes immediately.
  • DLL load errors appear (like “Cannot load DLL” or “Invalid format”), error codes # -150/-155.
  • Database connectivity issues, especially with Oracle clients.
  • Unexpected or inconsistent behavior in components that depend on external libraries.

If you notice these symptoms after migration, it’s a good idea to check the bitness of your environment components first—that can save a lot of troubleshooting time.

Quick & Easy Ways to Check Bitness

Here are straightforward methods to determine whether your components are 32-bit or 64-bit:

1. Check System Architecture Using Windows File Paths

On Windows, the presence (or absence) of certain directories helps identify system architecture:

  • For 64-bit systems: The directory C:\Windows\System32\Boot exists.
  • For 32-bit systems: This directory does not exist.

How to check: Use Uniface’s $fileexists function:

  • Plain Text
  • $fileexists("C:\Windows\System32\Boot")
    • Returns 0 if the directory doesn't exist (likely a 32-bit system).
    • Returns 2 if it exists (a 64-bit system).

2. Check DLL Bitness With the file Command

If you have tools like Cygwin or Git Bash installed, you can examine DLLs directly:

  • Plain Text
  • file uenc.dll
    • Output for a 64-bit DLL:uenc.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows
    • Output for a 32-bit DLL:uenc.dll: PE32 executable (DLL) (console) Intel 80386, for MS Windows

You can automate this check in Uniface with spawn OSCOMMAND. to streamline your process.

3. Query Windows Registry Settings

On 64-bit Windows, 32-bit applications and components are registered under a special section:

Plain Text

$setting("", "[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node]", "REGDATA")

  • If the key exists, your system has 64-bit architecture with 32-bit components registered.
  • If the key does not exist, it’s likely a 32-bit system.
 

Best Practice Tips

  • Always verify the bitness of Uniface, DLLs, and database clients before deployment. Especially after migrations, this helps prevent runtime errors and connectivity problems.
  • Keep a checklist of component architectures to ensure all parts are compatible.

Final Thoughts

Bitness mismatches are a common, solvable issue that can be easily prevented with a few quick checks. Taking the time to verify component architectures upfront will help ensure a smooth migration process and reliable operations after deployment.

If you'd like more tailored guidance or support, our Rocket Uniface team is here to help you navigate these technical challenges with confidence.

2 replies

Ingo Stiller
Forum|alt.badge.img+3
  • Participating Frequently
  • November 27, 2025

For those of you who don't know what “WOW” is and why the 64-bit system is located in C:\windows\system32, let's take a look back at history.

“In the beginning God created the heavens and the earth.”
Stop, not quite that far back... :-)

(Let's leave Windows 1.0 with its 16-bit values out for now.)

Starting with Windows 3, there was 32-bit support, and the essential system programs were stored under C:\windows\system32. 

Then with Windows 2000/Windows XP we saw the first 64-bit versions.
And now MegaHard found himself in a dilemma.
Actually, all system programs should have been moved to C:\windows\system64, but unfortunately, C:\windows\system32 had established itself as the location for THE system programs.
What to do?
People said to themselves that names are just smoke and mirrors and stored the 64-bit system programs under system32.
Unfortunately, not all Windows customers immediately switched to a 64-bit environment, and there were countless programs for 32-bit systems. All of these still required the 32-bit DLLs.
So “SysWOW64” was invented.
“System Windows on Windows 64.”
Actually, it should have been “SysW32OW” or “SysW32OW64” but somehow they liked the WOW effect so much.

So:
Where it says 32, it's 63-bit inside.
And where it says 64, it's 32-bit inside.

All clear :-)


Ingo Stiller
Forum|alt.badge.img+3
  • Participating Frequently
  • November 27, 2025

To determine whether the DLL was written for 32 or 64 bits, you can also search for the PE header in the DLL (always starts with “MZ”)
32 bits: 50 45 4C 01    “PE\x00\x00L\x01”
64-bit:  50 45 64 86    “PE \x00\x00d\x86”
But you should probably consult the internet, as DOS and PE headers can be a little complex. :-)