Provided below are the distribution packages made available as deliverables of the COBIA development project at end of its Phase 2 and subsequent maintenance releases. Current version is following distribution constraints apply:

  • CO-LaN distributes its software using Windows Installer version 5.0 packages. The distribution packages are either installation packages (MSI) or merge modules (MSM) that can be included in third-party MSI installers distributed by software vendors. Windows Installer 5.0 is only supported on Windows 7 and newer.
  • COBIA will not run on Windows XP and older.
  • CO-LaN only provides support for COBIA in versions of Microsoft Windows that are currently supported by Microsoft.

The zipped archive contains three merge modules pertaining to the COBIA redistributable runtime:

  • COBIA Runtime Common: Windows Installer merge module
  • COBIA Runtime x86: Windows Installer merge module for 32-bit architecture
  • COBIA Runtime x64: Windows Installer merge module for 64-bit architecture

The redistributable runtime consists of middleware components that will be installed on the end-user’s computer during installation of Process Modelling Environments (PMEs) and Process Modelling Components (PMCs) developed by the software provider. The COBIA redistributable runtime is intended to be distributed with and utilized by third-party software. An installation package that deploys the above mentioned merge modules is made available separately.

The source code of COBIA middleware is not released but the symbol tables for all released binary code are available on a dedicated symbol server.

The Software Development Kit (SDK) is provided as a stand-alone installation package which distributes a set of components and tools that are used by the software developer to create software that utilizes COBIA. The SDK includes tools to compile the source code of interfaces developed using the COBIA Interface Definition Language (IDL).

Version (February 06, 2024) addresses the following issues:

  • Ticket 179: resolves ECapeThrmPropertyNotAvailableHR conversion issues through COMBIA.
  • Ticket 188: add support for ICapeThermoPetroleumFractions to COBIA and COMBIA.

Version (September 19, 2023) addresses the following issues:

  • Ticket 179: resolves ECapeThrmPropertyNotAvailableHR conversion issues through COMBIA.
  • Ticket 180: resolves registeredForAllUsers implementation error in COBIA DLL.
  • Ticket 181: resolves assert firing when running in debug mode in the constructor of cape_open_error.

Tickets 178, 182, 183, 184, 185, 186: various build process issues resolved.

Version (June 21, 2023) addresses the following issues:

  • Ticket 171: enumerator of COBIA registered PMCs was crashing when faced with inconsistent information in Windows registry.
  • Ticket 172: non-CAPE-OPEN interfaces were not authorized by COMBIA to raise CAPE-OPEN errors. Raising CAPE-OPEN errors even in non CAPE-OPEN interfaces is rather common in an application implementing CAPE-OPEN interfaces. COMBIA now allows for CAPE-OPEN errors to be raised by non-CAPE-OPEN interfaces and picks up on the error description.
  • Ticket 173: COM system errors, such as E_POINTER, E_FAIL, are now mapped to COBIA system errors such as COBIAERR_CriticalError and COBIAERR_NullPointer. As an example application, it allows the CAPE-OPEN Test Suite to test that CAPE_OPEN errors are raised instead of system errors, where expected.
  • Ticket 174: particularly during installation, cobiaRegister (or wCobiaRegister) typically fails with the laconic message "CAPE-OPEN initialization fails". Better textual error messages are now in place about why COBIA fails - e.g. report on failure to load the COBIA core DLL (with path to the DLL and error code), report on failure to load any of the function pointers, etc.
  • Ticket 175: wrappers did not raise system errors. The code generation interface adapters are now fixed and the fixed code generation is applied to the client header files.
  • Ticket 176: COBIA namespace in generated adapter code was not always correct, leading possibly to either too many or too few occurrences of COBIA:: in the generated adapter code.
  • Ticket 177: if a registry (writer-) key is queried for a named subkey, and the subkey exists, the original key was returned erroneously, instead of the subkey. This bug resulted in registration/unregistration issues.

Version (December 16, 2022) addresses the following issues:

  • Ticket 97: COBIA_SmartPointer::outputArgument was implemented by means of an addReference. It is now implemented as a detach operation (saves an addReference and a release call).
  • Ticket 138: compilation issue on Linux. Some system header files were not declared as included in the main COBIA header file.
  • Ticket 139: COBIA code generator did not work on Linux platforms because std::regex searches did not work as expected.
  • Ticket 143: release broke the C++ parsing for the code generators, causing code generation on existing C++ classes to yield incorrect results.
  • Ticket 145: support dropped for CapeArrayInterface? type since CAPE-OPEN supports collections. Therefore passing an array of objects is not required under any circumstance.
  • Ticket 149: interface adapters forwarded non-CAPE-OPEN errors (e.g. COBIAERR_NullPointer, COBIAERR_InvalidArgument) as CAPE-OPEN errors with scope, interface name, etc and default error text. Error messages become shorter and cleaner if non-CAPE-OPEN errors are simply forwarded as non-CAPE-OPEN errors. As COBIA-based implementations have the interface wrapper code embedded in their binaries, a recompilation against new client headers is needed to benefit from the change made.
  • Ticket 150: COBIA Registry (XML file) reading on Windows failed to exit loop in case of read error.
  • Ticket 152: thermodynamic COBIA-based PMCs (Property Package Managers, Property Packages, Equilibrium Calculators, Physical Property Calculators) were sometimes incorrectly COM registered with "1.0" instead of "1.1" for the capeVersion field.
  • Ticket 154: COBIA SDK provides a Property Package and a Property Package Manager as examples of COBIA-based PMCs. They were both registered with only a version indepedendent progID. In COM, progID and versionIndependentProgID are fully optional. For generality, both PMCs are now registered also with progIDs.
  • Ticket 156: COBIA namespace was missing in generated code for CapeUUID and CapeWindowID types.
  • Ticket 163: the wrappers for CapeRegistryWriter? and CapeRegistryKeyReader? added a reference too many to the constructed object, causing their memory not to be released (memory leak). Any COBIA-based application code that uses CapeRegistryWriter? and CapeRegistryKeyReader? types directly should be rebuilt against the modified COBIA client headers.
  • Ticket 166: if a COBIA object was asked to return an object, and it returned itself, or another already existing object (example: a unit operation implements a port collection in the Unit Operation object and is asked for its port collection), COMBIA failed to recognize the object is the same, and created a second COM wrapper around the same COBIA object.
  • Ticket 168: start menu for COBIA SDK was changed to "CAPE-OPEN COBIA Software Development Kit" to be consistent with other software developed and distributed by CO-LaN.
  • Ticket 169: several causes of memory leaks were found in IDL parser. Since part of the necessary fixes are in the client header files, applications that explicitly refer to the IDL type library interfaces should recompile (this is typically not PMCs, but could be code wizards).

Version (November 12, 2022) addresses the following issues:

  • Ticket 125: COBIA does not nicely pick up all COM-based CAPE-OPEN objects.
  • Ticket 126: C++ code generator misspells putVersionIndependentProgId.
  • Ticket 127: No support for nested CAPE-OPEN error.
  • Ticket 128: wrong check for Not a Number.
  • Ticket 129: parser error in code generator.
  • Ticket 130: improper bracket matching resulting in C++ parsing errors.
  • Ticket 131: wrong CapeVersion? used when registering COM objects.
  • Ticket 132: lower bound for homogeneous 1D array parameters should be 0 in COMBIA.
  • Ticket 133: Synchronize access to COBIA objects from COM.
  • Ticket 134: COMBIA re-allocates Integer Array value as double array.
  • Ticket 136: CapePMCEnumerator leaked contained object.

Version (March 31, 2022) addresses the following issues:

  • Ticket 109: small memory leaks in various places.
  • Ticket 111: invalid template type in COMFlowsheetMonitoring::getUnitOperationCollection.
  • Ticket 112: COBIA_createInstance returns a null pointer instead of an error if a PMC Class factory is not found.
  • Ticket 113: DemoPPM does not hide its symbols to the dynamic linker leading to clashes with identical symbols of other COBIA applications.
  • Ticket 114: invalid IDispatch pointer returned by COMBIA COM objects.
  • Ticket 115: cobiaRegister supports options /i [prog-id] and /r [prog-id]
  • Ticket 116: invalid cast in DepersistFromTransitionFormat? leads to crash when instantiating a COBIA PMC using saved info from a COM PMC.
  • Ticket 117: adds a console-less version of cobiaRegister.exe.

Due especially to correction of Ticket 116, any application that calls DepersistFromTransitionFormat? should update COBIA to and recompile against the new COBIA.h header file.

Attention should be pointed to issue raised in Ticket 124 (that CO-LaN does not intend to fix): COBIA stub code will refuse to load COBIA runtime installed by a current user from an elevated process. Some installers elevate in a mixed-mode scenario even when installing for the current user. Particularly the default multi-user scenario of NSIS is subject to this.

Version (October 22, 2021) includes the addition of Flowsheet Monitoring and Custom Data interfaces, updates to installation packages to facilitate their inclusion in third-party installers, along with several minor bug fixes performed as part of active maintenance of COBIA and identified during the development of COBIA Phase III. The following tickets provide descriptions of the issues addressed by this release:

  • Ticket 21: information missing on code generators. Resolved by adding a developer's command prompt, which is a normal command prompt that has the code generation binary folder in the path, as a short cut link from the start menu. Also added a comment in the box that opens to show how to get the help for both cobiaregister.exe and COBIA_CodeGen.exe.
  • Ticket 30: description of components missing within custom installation of COBIA SDK.
  • Ticket 31: dialog on license missing from COBIA runtime installers.
  • Ticket 63: support for Flowsheet Monitoring and Custom Data in COBIA Phase II. An example implementation of a Flowsheet Monitoring PMC was added.
  • Ticket 76: the current custom action by the COBIA SDK installer attempts to make a short path name, and sometimes this will result in a long path name nevertheless. Was decided to not change the COBIA_INCLUDE environment value to be a short path name, remove the custom action that does so and remove the custom action DLL. Visual Studio users will not likely be affected. For other compilers, worst case scenario is that the COBIA_INCLUDE is not supported as it contains spaces and the developer will have to manually provide the right include folder.
  • Ticket 81: BasicCapeCollection? missed assignment and construction from CapeInterface?.
  • Ticket 82: when a COBIA object is exposed to COM via COBIA, a wrapper is placed around the object. If a COBIA object is passed as an argument to COM, through a COMBIA call, this object is also wrapped by a COM object. In this scenario, there are two COM objects created for the same COBIA object, and they are therefore observed from the COM side as two different objects. The solution to the multiple COM wrapper creation is to keep a table of COM wrappers that are currently alive, index by unique ICapeInterface pointer. Any COM wrapper created is added to the table, any COM object deleted is removed from the table. If a COM pointer is requested, the table is checked. All of this is shielded by a mutex specific to this table.
  • Ticket 83: added assignment operators, fixed return type of assignment operators, fixed missing byte swap in assignment from Windows GUID to ExtCapeUUID.
  • Ticket 84: ICapeError was not a valid type in the IDL according to COBIA, so that errors could not be passed via IDL defined interface in their original form.
  • Ticket 87: command line code generater raised an error in case a name space was specified for a new class. It should raise an error in case a namespace is specified for any function except creating a new class.
  • Ticket 88: std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. Fixed by providing publicly accessible typedefs named iterator_category, value_type, difference_type, pointer, and reference.
  • Ticket 90: registrar component did not release registry writer and reader interfaces in all cases.
  • Ticket 91: Parser component did not check for null pointer in smart pointer assignment.
  • Ticket 92: COBIA IDL parser crashed on invalid parse data (such as text outside of the main library). In addition the parsed IDL file was not closed.
  • Ticket 93: some ICapeString methods were invalidly saying in their comment that the length included the terminating null character.
  • Ticket 94: /*in*/ annotation was missing on UUIDs in automatically generated code.
  • Ticket 95: redundant namespace was used in code generated files.
  • Ticket 96: Current-user PMCs failed to create on wine.
  • Ticket 98: error messages were not formulated properly in IDL parser as a result of multi byte string to wide string conversion issues.
  • Ticket 99: some methods in data wrappers did not initialize the return variables in case of an error return, leading some compilers to complain.
  • Ticket 100: generated wrapper code passed output interface wrappers by value instead of reference. This was not obvious in the generated code, as in case of the CAPE-OPEN 1.2 interfaces, all functions that return an interface return it as [out,retval] and the problem only occurs for interfaces that are returned as [out].
  • Ticket 101: in expectation for COBIA Phase III, allow createInstance to accept CapePMCCreationFlag_AllowRestrictedThreading.
  • Ticket 102: the explanation about the selection of COBIA header files carries a typo. Instead of “Requires for any C++ based COBIA development” should be “Required for any C++ based COBIA development”.
  • Ticket 107: Water PP example throwing string rather than cape_open_error.

Version (July 15, 2021) resolves two issues of major relevance:

  • Ticket 72: Change COMBIA threading model for COM registration
  • Ticket 73: Thermo consumption component CATIDs added

Version (June 11, 2021) resolves two issues of major relevance:

Version (April 23, 2021) resolves especially two issues located in COMBIA:

Version (April 12, 2021) resolves several issues found when exercizing COBIA:

  • Ticket 53: Incorrect SDK registration entry in VBS script
  • Ticket 55: Error in constructor of CapeStringAdapter?
  • Ticket 56: Broken get_reports in COMBIA's unit operation wrapper
  • Ticket 57: Failure to register x64 COBIA PMC as COM component for all users
  • Ticket 58: Uninitialized BSTR in COMBIA string parameter
  • Ticket 59: Crash in COMBIA for empty arrays in VARIANT data wrappers
  • Ticket 60: COMBIA incorrectly stores boolean as integer

Version (March 18, 2021) resolves mainly issues related to deployment:

Version (March 15, 2021) adds mainly transitioning between COM and COBIA to the functionalities covered so far in COBIA. Version resolves tickets:

  • Ticket 46: COBIA Ideal Thermo package edit box does not show
  • Ticket 49: ThermoClientTestPME incorrectly persists array of integers
  • Ticket 50: Persistence transition

Version (February 24, 2021) resolved tickets pertaining to COBIA distributed components:

  • Ticket 32: COBIA_CodeGen.exe cannot locate SDK
  • Ticket 33: Typo in license notice with COBIA SDK installer
  • Ticket 34: Title given to text on license notice
  • Ticket 35: COBIA should link to static MSVC runtimes
  • Ticket 37: Crash on obtaining temp-dependent property list in WaterPP
  • Ticket 38: Invalid response from GetPhaseInfo? in WaterPP
  • Ticket 39: Crash on saving package from test PME
  • Ticket 40: PMC registration fails for all users
  • Ticket 44: Fix to PMC self-registration for all users in header files