openDecal/docs/plans/2026-02-08-com-registration-test.md
erik 6a67ec2056 Add COM registration verification script
Test-ComRegistration.ps1 registers all 10 COM server DLLs via regasm
and verifies all 50 CLSIDs appear in the registry. Supports -Build
to compile first and -Unregister to clean up. Checks both native and
WOW6432Node registry paths for 32-bit COM on 64-bit Windows.

Result: 50/50 CLSIDs pass, 0 GUID mismatches vs original Decal.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 00:12:37 +01:00

3.8 KiB

COM Registration Test - Implementation Plan

For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

Goal: Verify all 10 COM server DLLs register correctly with regasm and their CLSIDs match the original Decal v2.9.8.3.

Architecture: Build a PowerShell verification script that: (1) registers each DLL with regasm, (2) queries the registry for expected CLSIDs, (3) reports pass/fail per GUID. We also cross-reference our [Guid] attributes against the original .rgs files from source_checkout.

Tech Stack: regasm.exe (.NET Framework 4.x), PowerShell, Windows Registry


Task 1: Cross-Reference GUIDs Against Original .rgs Files

Files:

  • Read: source_checkout/Decal/*.rgs (original ATL registry scripts)
  • Read: source_checkout/DecalControls/*.rgs
  • Read: source_checkout/DecalFilters/*.rgs
  • Read: source_checkout/DecalInput/*.rgs
  • Read: source_checkout/DecalNet/*.rgs
  • Read: source_checkout/DecalDat/*.rgs
  • Read: All *Impl.cs files in reconstructed/Managed/Decal.*/

Step 1: Extract GUIDs from .rgs files Parse each .rgs file for CLSID patterns like {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}.

Step 2: Extract GUIDs from our [Guid("...")] attributes Grep all Impl.cs files for Guid attributes.

Step 3: Compare and report mismatches Any GUID in our code that doesn't match the original .rgs is a critical bug.


Task 2: Write the COM Registration Test Script

Files:

  • Create: reconstructed/tools/Test-ComRegistration.ps1

Step 1: Write PowerShell script

The script should:

  1. Find regasm.exe (32-bit .NET Framework 4.x)
  2. Build the solution if needed
  3. Register each of the 10 DLLs with regasm /codebase
  4. Query registry for each expected CLSID at HKCR\CLSID\{GUID}\InprocServer32
  5. Verify the registered DLL path points to our built assembly
  6. Report pass/fail per DLL and per GUID
  7. Optionally unregister with regasm /unregister

Step 2: Run the script

powershell -ExecutionPolicy Bypass -File reconstructed/tools/Test-ComRegistration.ps1

Expected: All 55 CLSIDs register and appear in registry.

Step 3: Commit

git add reconstructed/tools/Test-ComRegistration.ps1
git commit -m "feat: add COM registration verification script"

Task 3: Run Registration and Fix Any Issues

Step 1: Execute registration Run regasm on each DLL and capture output.

Step 2: Investigate any failures Common issues:

  • Missing dependencies (Interop DLLs not in same directory)
  • x86 vs x64 regasm mismatch
  • Missing ComVisible or Guid attributes

Step 3: Fix and re-test until all pass

Step 4: Commit fixes


Task 4: Unregister and Document Results

Step 1: Run unregister to clean up

regasm /unregister Decal.DecalDat.dll

Step 2: Verify CLSIDs are removed from registry

Step 3: Document results in a test report


DLL-to-GUID Reference (55 CLSIDs across 10 DLLs)

DLL Classes CLSIDs
Decal.DecalDat.dll 3 DatService, DatStream, DatLibrary
Decal.DHS.dll 2 HotkeySystem, Hotkey
Decal.SpellFilter.dll 3 Spells, Spell, Component
Decal.DecalInput.dll 6 InputService, Hotkey, WndMsg, WinMsgHook, Timer, InputBuffer
Decal.DecalNet.dll 2 NetService, WebRequest
Decal.DecalFilters.dll 7 World, WorldObject, WorldIterator, CharacterStats, EchoFilter, EchoFilter2, Prefilter
Decal.Core.dll 4 DecalCore, ACHooks, PluginSite2, DecalEnum
Decal.DecalControls.dll 17 Checkbox, List, StaticText, Choice, Progress, FixedLayout, BorderLayout, PageLayout, TextColumn, IconColumn, CheckColumn, DerethMap, Edit, Scroller, PushButton, Notebook, Slider
Decal.DecalRender.dll 4 RenderService, HUDBackground, HUDView, RenderTargetWrapper
Decal.D3DService.dll 2 D3DService, D3DObj