To continue with this content, please log in with your Data Access ID or create a new account.
Cancel Data Access ID
You may not be authorized to see this content. Please contact Data Access Europe for more information.
Cancel Data Access Europe
You are not authorized to see this content.
Cancel Data Access Europe
Next lesson:
Language changes
Cancel

Migrating to DataFlex 2021, Part 3

Lesson 12: Introduction – 64-bit

Part 3 of the Migrating to DataFlex 2021 series focuses on what 64-bit is, why it may be beneficial and what are the difficulties with 64-bit.

Creating a 64-bit version of an application can be easy or occasionally challenging. “64-bit” refers to the width of a memory address, which is 8 bytes. This is different from 32-bit where the memory address is 4 bytes. The width of a memory address is equal to the size of a pointer.  With 64-bit memory addresses, more gigabytes of memory, and more data, can be addressed. In theory, a benefit of this is increased performance. 

The main reason to move to 64-bit, however, is that there is a global movement towards using 64-bit, so it’s important to do the same to remain current. Doing so is more “future proof.” A DataFlex application must be 64-bit to communicate with other 64-bit applications, and most new software will be 64-bit. It is also safe to assume that in the future there will be 64-bit only operating systems. For these reasons, offering 64-bit applications is the more competitive choice. 

Current Microsoft Windows operating systems are 64-bit but allow 32-bit applications to run on it by having them move their data through the WindowsOnWindows64 (WOW64) layer. 64-bit applications can store data right in memory without having to go through the WOW64 layer, which is potentially faster.

Why can 64-bit be difficult? There are two main reasons:

  1. A 64-bit pointer does not fit in a 32-bit data type, such as an integer.
    1. In 64-bit, moving a pointer to an integer would lead to pointer truncation, which would result in errors or crashes.
    2. Unfortunately, integer types are used to store pointer values in a lot of existing code in DataFlex applications. Historically, there was not a specific pointer type, so it originally didn’t matter. It will now be problematic in 64-bit.
  2. 32-bit and 64-bit do not mix.
    1. This means that dependencies must become 64-bit


Setting for Building and Running 64-bit


The Studio is 64-bit, but applications can still be built, run, and debugged as either 32- or 64-bit. The main toolbar in the Studio has a switch for 32- or 64-bit.


DEMONSTRATION

  • The bit setting can be applied from the drop-down menu located on the main toolbar…
  • …or by selecting ‘Project > Project Properties,’ clicking on the ‘Compiler’ tab, and then choosing either the ’32-bit’ or ’64-bit’ radio button under ‘Platform.’    

  • The executable name suffix can also be set there. By default it is blank for 32-bit, and set to ‘64’ for 64-bit. This will add the string “64” to the name of the resulting 64-bit executable file.
  • For WebApps, it is advised to leave them both blank because the WebApp server points to a single executable location. These settings are saved per project in the .cfg file.
  • Note that there is no Programs64 folder. The 32- and 64-bit deliverables both end up in the Programs folder. That is why they need to be distinguished by name, using the executable name suffix.
  • Generally, a programs64 folder is not needed and not advised, but if wanted, one can be made by...
  • Create a Programs64 folder, and copy the config.ws file to it
  • Change this new config file to let the ProgramPath point to Programs64
  • Duplicate the .sws file and rename it to <name>64.sws, and let it point to the config.ws file in Programs64


  • Now when the workspace file is opened in the Studio, it compiles to the Programs64 folder, while the original still compiles to the Programs folder. All use the same sources.

  • Compilation can also still be done outside of the Studio, using DfComp.exe. For compiling 32-bit, use the one in the ‘Bin’ folder, and for 64-bit use the one in the ‘Bin64’ folder. In DataFlex 2021 there is also a command-line compiler executable, called DfCompConsole.exe.
  • The content can be seen if the manifest file is not embedded in the resulting executable. In the file, “x86” is for 32-bit and “amd64” is for 64-bit. Be aware that the 64-bit executable must go with a 64-bit manifest file, or the application will not run. Normally, this is not a concern because the Studio automatically writes out the correct one.