twinBASIC Update: February 24, 2026

Highlights include a new feature being added to the v1 roadmap: support for running 32-bit ActiveX controls in 64-bit twinBASIC processes.

twinBASIC Update: February 24, 2026

On April 23, 2021, I helped Wayne Phillips introduce the world to twinBASIC at the Access DevCon Vienna conference. I boldly predicted that twinBASIC (along with the Monaco editor) would replace VBA and its outdated development environment by 2025. With that goal in mind, this weekly update is my attempt to keep the project fresh in the minds of the VBA development community.

Every Sunday Monday week, I will be providing updates on the status of the project, linking to new articles discussing twinBASIC, and generally trying to increase engagement with the project. If you come across items that should be included here, please leave a comment below.

Here are some links to get involved with the project:


Highlights

Run 32-bit ActiveX Controls in 64-bit twinBASIC!!!!

From Wayne in Discord:

We’re bringing forward a roadmap item originally planned for later this year:

Support for ActiveX controls with unmatched bitness via a proxy process (for example, a 64-bit app hosting a 32-bit ActiveX control). This will be a major win for anyone relying on legacy 32-bit ActiveX controls that don’t have 64-bit equivalents. In many cases, it should make the move to 64-bit much easier - and remove one of the biggest blockers to upgrading.

Not every ActiveX control will be suitable for this approach, but we already have several complex, real-world controls running successfully in testing. The tech is powered by a new IPC mechanism I’ve designed specifically for this purpose, built on ultra-fast shared memory for minimal overhead and high performance.

This feature will now be a core part of the v1 release. We will be updating the v1 roadmap in the coming days.

Discord Chat Summary

* Auto-generated via Claude-Sonnet-4.5

Overview

This week's discussions centered heavily on cross-platform architecture and the challenges of OS-agnostic development, with significant community engagement around design patterns, API abstraction, and UI frameworks. A major announcement from waynephillipsea revealed that cross-bitness ActiveX control support will be included in the v1 release, marking a substantial shift in the roadmap. Technical deep-dives covered Boolean handling quirks, WinRT metadata manipulation, and the complexities of 64-bit migration.

Cross-Platform Architecture Discussion

  • braja_07733 initiated discussion about architecture patterns for future Linux/macOS support, focusing on interface-based design and OS abstraction layers rather than syntax concerns
  • bclothier emphasized that true OS-agnostic code requires framework-level abstraction, noting that even Scripting.FileSystemObject breaks cross-platform compatibility despite avoiding Declare statements
  • fafalone highlighted the challenge that most significant applications heavily depend on Windows APIs, making 1:1 API mapping between platforms impractical
  • The community explored various UI framework approaches including Chromium-based solutions, with bclothier proposing WebAssembly as a path to write forms directly in twinBASIC while avoiding HTML/CSS/JS complexity

Major v1 Roadmap Update

  • waynephillipsea announced that cross-bitness ActiveX control support (64-bit apps hosting 32-bit controls via proxy process) has been moved forward and will be included in the v1 release
  • The feature uses a custom IPC mechanism built on ultra-fast shared memory, with several complex real-world controls already running successfully in testing
  • This addresses one of the biggest blockers to 64-bit migration for applications dependent on legacy 32-bit ActiveX controls without 64-bit equivalents

Boolean Handling & COM Quirks

  • waynephillipsea identified a Microsoft bug in the IFont interface where Boolean properties return value 1 instead of proper VARIANT_TRUE (-1), breaking Not operations
  • fafalone confirmed the issue stems from the stdole type library incorrectly defining properties as VARIANT_BOOL when the actual interface uses BOOL (Long)
  • The "Sanitize Booleans" project option in twinBASIC corrects this behavior automatically
  • bclothier recommended encouraging If x Then over If x = True Then to avoid dirty Boolean issues, noting there are unlimited ways to express truth but only one way to express falsehood

Advanced WinRT Development

  • deletedewd demonstrated successful implementation of IRoMetaDataLocator using manual vTable construction with delegates in twinBASIC
  • The work enables dynamic calculation of parameterized WinRT interface IIDs (like IAsyncOperation<UInt32>) directly from metadata
  • Testing confirmed that Extends Nothing interfaces work correctly when calling methods, though variables must be manually cleared before going out of scope to prevent unwanted Release calls
  • The RoGetMetaDataFile function was identified as the WinRT equivalent to ITypeInfo for extracting metadata from winMD files

64-bit Migration Guidance

  • Community discussion around 64-bit migration challenges led to recommendations for identifying pointer types that need conversion from Long to LongPtr
  • fafalone advised tracking original types back to underlying definitions, noting that pointers, handles, and size_t typically require LongPtr
  • deletedewd emphasized that once developers adopt LongPtr for pointer types, it becomes natural through muscle memory
  • Pointer arithmetic operations (copying 4 bytes, multiplying offsets by 4) were identified as requiring special attention during migration

Conclusion

The week marked a significant milestone with the announcement that cross-bitness ActiveX support will ship in v1, addressing a critical migration blocker. Extensive architectural discussions around cross-platform development revealed both the challenges ahead and potential solutions through framework abstraction. The community continued pushing technical boundaries with advanced WinRT metadata manipulation and shared practical guidance on 64-bit migration strategies. These developments demonstrate twinBASIC's evolution toward both modern capabilities and pragmatic solutions for legacy code migration.

Changelog

Here are the updates from the past week. You can also find this information by visiting the GitHub twinBASIC Releases page.

Releases · WaynePhillipsEA/twinbasic
Contribute to WaynePhillipsEA/twinbasic development by creating an account on GitHub.
  • Nothing new this week.
  • The announcement (and sneak peek) of v1 support for running 32-bit ActiveX controls in 64-bit processes would certainly explain the relative quiet in the releases section here the past few weeks, though.

All original code samples by Mike Wolfe are licensed under CC BY 4.0