Ticket #115 (closed defect: fixed)

Opened 9 months ago

Last modified 9 months ago

COBIA does not allow for VersionIndependentProgID

Reported by: jasper Owned by: jasper
Priority: major Milestone: Maintenance of Phase II
Component: Registrar Version:
Keywords: Cc:


COBIA registration of COM objects (via COMBIA) allows for specifying a ProgID, but not for a VersionIndependentProgID. It is conceivable that COM PMEs use a VersionIndependentProgID to store the PMC's identity.

VersionIndependentProgID should probably be added to COBIA.

Change History

comment:1 Changed 9 months ago by jasper

I have now encountered the first case where we need both ProgID and VersionIndependentProgId? to enable compliancy with an earlier COM version of a PMC.The ProgID (e.g. "TEA.PropertyPackageManager?.1") is used frequently by PMEs (COFE is one of them) - the VersionIndepdentProgID (e.g. "TEA.PropertyPackageManager?") is used in contexts where the thermo provider is manually specified (by a configuration file for example).

I'd rather go ahead and make the changes so that I can update the software I am currently working on. However, this puts us in a new place, of having to update an interface specification, which we have not done before.

The particular interface is the registrar and offered by the middle ware. So I think in this particular case we can extend the interface simply by adding a method to the end of the interface, which is then supported by all objects that implement the interface (which is the registrar only) in a new enough COBIA, and never called by implementations that are compiled against an earlier version of COBIA.

I propose the following changes:

1) update the registrar interface by adding a new member:

CapeResult(COBIAMETHOD* putVersionIndependentProgId)(void *me,const CapeCharacter *progId);

2) update its wrapper in the same manner

3) implement this member in the registrar provided by COBIA - current behaviour is that the ProgId? and VersionIndependentProgId? are written as one and the same thing. New implementation will write two different strings in case both are specified, or one and the same if only ProgId? is specified.

5) extend the ICapePMCRegistrationDetails to have a new member

CapeResult (COBIAMETHOD* getVersionIndependentProgId)(void *me,ICapeString*progId);

at the end of the interface.

6) update the wrapper in a consistent manner

7) implement this function on both objects that enumerate the PMCs (COM and COBIA enumerators); return ProgId? in case VersionIndependentProgId? is not defined

8) Release a new COBIA

comment:2 Changed 9 months ago by michelpons

What is the list of registration details for a COBIA application ? Mentioned here are just a ProgID and a yet missing version-independent ProgID. Is there anything similar to a CLSID in COBIA, that is a globally unique identifier that identifies a COBIA application? Modification to ICapePMCRegistrationDetails would let one obtain the version-independent ProgID. Is there a need to have a function where, given the version-independent ProgID, the COBIA CLSID is returned?

comment:3 Changed 9 months ago by jasper

Registration details:

  • ProgID
  • VersionIndependentProgID
  • Meta info:
    • name
    • about
    • component version
    • CAPE-OPEN version (I think we should retire this in the light of the versioning plan)
    • vendor URL
    • help URL
  • Functionality
    • category IDs
    • service types (COBIA specific - COM has e.g. InprocServer32 here)
    • registration flags (COBIA specific)

and implicitly whether a PMC is registered for all users or not.

COBIA and COM CLSID overlap - this is underlying transitioning. COBIA does not require an AppID.

You can get all registration details by CLSID by getting a PMC-registration-details object by CLSID from the PMC enumerator. You can get this object by ProgID (or VersionIndependentProgID) as well.

comment:4 Changed 9 months ago by michelpons

  • Version set to
  • Milestone set to Maintenance of Phase II

comment:5 Changed 9 months ago by jasper

  • Status changed from new to closed
  • Resolution set to fixed

Fixed in commit revision 261 for Phase II

Fixed in commit revision 262 for Phase III

comment:6 Changed 9 months ago by jasper

Additional fix in commit 267

Note: See TracTickets for help on using tickets.