Skip to content

v0.3.10

Choose a tag to compare

@github-actions github-actions released this 28 Apr 04:44
· 3 commits to main since this release
v0.3.10: call SiGetEventWinInit before SiGetEvent (canonical pattern)

v0.3.9 confirmed siappdll IS dispatching messages: all 20 logged were
msg=0xC20B (a registered Si message) — but SiGetEvent returned
SI_SKIP_EVENT for every one. SI_SKIP_EVENT means 'siappdll handled it
internally, you should ignore.' We never got SI_IS_EVENT for motion.

The SDK's canonical call pattern is:

  SiGetEventData ed;
  SiGetEventWinInit(&ed, msg, wParam, lParam);  // initializes hidden state
  SiGetEvent(handle, 0, &ed, &spwEvent);

We were skipping SiGetEventWinInit and constructing SiGetEventData via
C# field-initializer. That fills the public msg/wParam/lParam fields
but may leave native-only hidden state uninitialized that SiGetEvent
checks before classifying the message as a real Si event.

Adds the SiGetEventWinInit P/Invoke and calls it before SiGetEvent.
If that still gives SI_SKIP_EVENT for everything, the next move is
abandoning siappdll for 3DxNavLib (the modern API that doesn't go
through window messages at all).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>