PPJ Manual
HomeCurrent IssuesDownloads
  • Welcome
  • Releases
    • PPJ 2023
  • PPJ 2023
  • PPJ Web API
  • PPJ Desktop API
  • Wisej.NET Documentation
  • General
    • Framework
      • Features
        • SAL and SQL Functions
        • Constants and Variables
        • SalContext
        • Visual Toolchest
        • XSal2
        • Reporting Support
        • LINQ Support
        • SalCompileAndEvaluate
        • Unicode Support
        • Startup Arguments
        • App.config
      • Data Types
        • Automatic Casts
        • Dynamic Arrays
      • Controls
        • ToolBar
        • TabControl
        • TableWindow
        • QuickObject
        • Ribbon Bar
        • NavigationBar
      • SQL Support
        • Configuration
        • ADO.NET Drivers
        • Bind and Into Variables
        • DBP Parameters
        • SqlContext
      • Extensions
        • Table Window
        • Unicode Support
        • Bug Fixes
        • Object Oriented Types
        • Custom Parsers
        • Named Properties
        • Microsoft Charts
        • Tabbed MDI
        • Watermark
        • HTML Rendering
      • Skins and Themes
        • Skin Files
        • Theme Files
        • Configuration
        • Skin Editor
        • Theme Builder
      • Tracing
        • Trace Viewer
        • Default Listeners
        • Tracing the Application
      • Spell Checker
        • Dictionaries
    • Ported Application
      • Project Structure
        • Late Bind Calls
        • Visual Styles
        • Unqualified References
        • Message Actions
        • When SQLError
        • Classes
      • Global Items
      • Forms
      • COM/ActiveX
      • Multiple Inheritance
      • Configuration Tool
      • Issues & Workarounds
    • Ported Reports
      • General
      • Crystal Reports
        • Structure
        • Unsupported Features
      • List & Label
        • Report Conversion
        • Structure
        • Document
        • Input Items
        • Passing Data
        • Unsupported Features
      • Reporting Services
        • Features
      • Stimulsoft
        • Break Groups
        • Fields
        • Formulas
        • Cache Mode
Powered by GitBook
On this page

Was this helpful?

  1. General
  2. Ported Application
  3. Project Structure

Late Bind Calls

PreviousProject StructureNextVisual Styles

Last updated 2 years ago

Was this helpful?

Late bind calls in SAL do not have a direct equivalent in the OOP world. In practice it's as if calling a function using the double dot notation in SAL adds a new virtual function to the application.

The new virtual function starts with a dot. Therefore calling the virtual function using the name that starts with a dot behaves exactly the same as virtual functions in C# or Java. While calling the function without using the double dot calls the local function.

For example, in OpenText Team Developer SAL language:

Function: Test
 Actions:
         Call ..TestImplementation()

Is equivalent to:

public SalNumber Test()
{
 return __TestImplementation();
}
 
public virtual SalNumber __TestImplementation()
{
 return TestImplementation();
}

Whenever a function is called using the double dot location, Ice Porter creates a second virtual function (using a custom defined prefix - default is __) that by default calls the local function.

Therefore, if the virtual function is overridden in a derived class, the implementation ends up calling the local function in the derived class and everything works as expected.

Late bind calls and multiple inheritance pose additional problems because virtual methods from second base classes cannot be overridden directly. See calls for more information on how a late bind call from a second base class is routed to the final implementation.

Multiple Inheritance LateBind