Support Subsystems
Beyond the major subsystems, MovieMakerCore carries four small support directories.
AddIn (AddIn/)
| File | Role |
|---|---|
SundanceAddInContract.h | The add-in API contract (interfaces an add-in implements) |
SundanceAddInManager.h | Loads add-in DLLs, manages lifetimes |
Current state: the add-in host loads DLLs but the plugin API is inert — a documented stub category (Stub Design). Add-ins register, initialize, and shut down; no plugin commands are dispatched yet.
External (External/)
Inert-but-linkable stubs for external surfaces MovieMakerCore imports but that do not exist on modern Windows:
| Stub | Replaces |
|---|---|
PSAStub.cpp/.h | The PSA authentication store — re-implemented securely with DPAPI (see Security) |
DuiUtilStub.cpp/.h | DuiDirect utility functions |
UIControlsStub.cpp/.h | External UI controls |
DragDropStub.cpp/.h | Drag/drop format enumeration (partial — see TODO audit) |
These keep the engine linkable and runnable — the delay-load survival logic in the launcher ensures their absence at runtime is also non-fatal.
DataStructs (DataStructs/)
Utility containers used across the engine: IntSet, StringSet, and the shared
DataStructs.h definitions. The original used a custom STL-like container library
here rather than the CRT STL — preserved
(Quirk #17).
Resources (Resources/)
| File | Role |
|---|---|
ResourceIds.h | Engine resource ID assignments (dialogs, images, UIFILEs) |
StringTableIds.h | String table IDs (localizable strings — shipped in MovieMakerLang.dll) |
Command/resource IDs are non-contiguous, matching the original's organic growth (Quirk #10).
Global singletons
The engine follows the original's global singleton architecture — key managers are process-wide singletons reachable from static accessors (Quirk #15). This is why threading notes in the codebase repeatedly stress which singleton methods may be called from background workers.