Skip to main content

Support Subsystems

Beyond the major subsystems, MovieMakerCore carries four small support directories.

AddIn (AddIn/)​

FileRole
SundanceAddInContract.hThe add-in API contract (interfaces an add-in implements)
SundanceAddInManager.hLoads 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:

StubReplaces
PSAStub.cpp/.hThe PSA authentication store — re-implemented securely with DPAPI (see Security)
DuiUtilStub.cpp/.hDuiDirect utility functions
UIControlsStub.cpp/.hExternal UI controls
DragDropStub.cpp/.hDrag/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/)​

FileRole
ResourceIds.hEngine resource ID assignments (dialogs, images, UIFILEs)
StringTableIds.hString 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.