Overview
C API (Component Interface)
struct ModuleInfo { UINT32 componentInterfaceRevisionCompiled; UINT32 componentInterfaceRevisionRequired; UINT32 binding; UINT32 flags; };

The module information structure holds information about the module, as opposed to information about the component (cf. ComponentInfo). This structure is returned to the framework by the module during EVENT_MODULE_INIT.

Fields

UINT32 componentInterfaceRevisionCompiled
The revision of the Component Interface against which the module was compiled.
UINT32 componentInterfaceRevisionRequired
The revision of the Component Interface that the module requires in order to run.
UINT32 binding
This field is used to indicate the binding against which a particular component is built (e.g. 1199, 1266, etc.). This field is included to allow fixes to be applied if bindings are found to have bugs, and must be supplied though it is not currently used other than for display.
UINT32 flags
See below.

Interface Revision

Periodically, the Component Interface may be extended, adding more fields to structures that are passed between the component and the framework. New components/engines can read/write these fields, but old ones cannot. The management of this interface revision process is described in detail on the page Module Events.

Flags

F_NO_CONCURRENCY
If set, the Engine will instantiate all copies of this process in a single thread. If multiple copies of this process are placed in separate threads by initial thread assignment, thread reassignment will cause all copies to run in the first copy's thread. Set this flag if it is not safe to run more than one instance of the process concurrently.
F_NO_CHANGE_THREAD
If set, the framework will not move components instantiated by this module from one worker thread to another during dynamic load balancing. In other words, all events received by components will be called in the same worker thread (with the possible exception of EVENT_MODULE_INIT). Any component that uses thread-sensitive resources (e.g. has GUI components) should set this flag.
F_NO_CHANGE_VOICE
If set, the framework will not move components instantiated by this module from one voice to another during dynamic load balancing. In other words, all events received by components will be called from the same voice (with the possible exception of EVENT_MODULE_INIT). Any component that uses voice-sensitive resources (like local hardware) should set this flag.
Notes
  • The framework may still instantiate more than one instance of a Process that sets F_NO_CONCURRENCY and run them interleaved, so setting this flag does not relieve the process of data encapsulation responsibilities.
  • F_NO_CONCURRENCY is currently only respected for Process components. If you intend to author a Data (why???) or Utility (possibly...) component that is not thread-safe, you will have to first request a new release that respects this flag for your component type.

Discussion

See the discussion at ComponentInfo.