Previous Up Next

5  Module Com: run-time library for COM components

type 'a interface
The type of COM components implementing interface 'a
type 'a iid
The type of the interface identifier for interface 'a
type clsid
The type of component identifiers
type 'a opaque
The type representing opaque pointers to values of type 'a. Opaque pointers are pointers with attribute ptr in IDL files.
exception Error of int * string * string
Exception raised to report Com errors. The arguments are Error(errcode, who, what). errcode is the Com error code (HRESULT code) with the high bit clear. who identifies the function or method that raised the exception. what is a message explaining the cause of the error.
val initialize : unit -> unit
Initialize the COM library. Must be called once before using any function in this module. Com.initialize can be called several times, provided that Com.uninitialize is called an equal number of times before the program exits.
val uninitialize : unit -> unit
Terminate the COM library.
val query_interface : 'a interface -> 'b iid -> 'b interface
Com.query_interface comp iid asks the component comp whether it supports the interface identified by iid. If yes, it returns the corresponding interface of the component. If not, it raises Com.Error.
type iUnknown
The type of the interface IUnknown, from which all other interfaces derive.
type iDispatch
The type of the interface IDispatch, from which all dispatch interfaces derive.
val iUnknown_of : 'a interface -> iUnknown interface
Return the IUnknown interface of the given component. This operation never fails, since all components support the IUnknown interface.
val combine : 'a interface -> 'b interface -> 'a interface
Combine the interfaces of two components. Com.combine c1 c2 returns a component that supports the union of the interfaces supported by c1 and c2. When queried for an interface, the resulting component delegates its implementation to c1 if c1 implements that interface, and otherwise delegates its implementation to c2.
val clsid : string -> clsid
Parse the string representation of a component identifier (hex8-hex4-hex4-hex4-hex12, where hexN represents N hexadecimal digits).
val create_instance : clsid -> 'a iid -> 'a interface
Com.create_instance clsid iid creates an instance of the component identified by clsid, and returns its iid interface. The implementation of the component is searched in the registry; if the component is implemented in a DLL, the DLL is loaded in memory if necessary; if the component is implemented in a separate server process, the server is started if necessary. Raise Com.Error if the component clsid cannot be found, or if it does not support interface iid.
type 'a component_factory =
  { create : unit -> 'a interface;
    clsid : clsid;
    friendly_name : string;
    ver_ind_prog_id : string;
    prog_id : string }
Informations required for registering a Caml implementation of a component. create is a function that returns a fresh instance of the component. clsid is the component identifier. friendly_name is a short description of the component (for information only). ver_ind_prog_id and prog_id are symbolic names for the component. By convention, prog_id is ver_ind_prog_id plus a version number at the end, i.e. ver_ind_prog_id is "MyCamlComponent" while prog_id is "MyCamlComponent.3".
val register_factory : 'a component_factory -> unit
Register a Caml implementation of a component. Com.register_factory f stores the component factory f in the registry. Other programs can then create instances of the component by calling CreateInstance from C and C++ or Com.create_instance from Caml.
type hRESULT_int = int
type hRESULT_bool = bool
type bSTR = string
The Caml types corresponding to the IDL types HRESULT_int, HRESULT_bool and BSTR, respectively.

Previous Up Next