twinBASIC Update: March 24, 2025
Highlights include a critical bug fix for Excel Custom Task Pane development, tB's return to DevCon Vienna, and Windows Registry and System Tray sample projects from forliny.

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:
- Custom twinBASIC IDE Installation Guide
- twinBASIC Discord Server (chat about the project)
- twinBASIC Wiki (list of new features not in VBx)
- GitHub Issue Tracker (report bugs)
- twinBASIC/VBx LinkedIn Group
Highlights
Excel Custom Task Pane Bug Fix
twinBASIC now enables seamless Custom Task Pane development across all modern Excel versions, including 64-bit editions.
Custom Task Panes (CTPs) in Excel are specialized UI panels that allow developers to create custom interfaces that dock alongside Excel's native panes. Introduced in Office 2007 as part of the Office Fluent UI, they provide a way for add-ins to present controls and information without interrupting the main Excel workflow.
However, VB6 add-ins with CTPs have become increasingly problematic in modern Excel versions. While they may still work in 32-bit Excel, compatibility has degraded over time, particularly in Excel 2019 and Microsoft 365 where they often fail to respond to control events.
For 64-bit Excel, VB6 add-ins aren't an option at all since VB6 only produces 32-bit code. This has forced many developers to migrate to .NET-based solutions like VSTO with C# or VB.NET, requiring significant reworking of existing code and new skillsets.
A critical bug fix in BETA 718 resolved issues where twinBASIC-compiled CTPs were causing Excel to crash, particularly when using ActiveX controls. Community testing confirms the fix works perfectly across Excel versions from 2010 through 365, without requiring separate ActiveX controls as was needed in VB6 implementations.
This enhancement allows VBA developers to leverage their existing skills to create professional Office add-ins for modern Excel versions without having to learn an entirely new technology stack.
twinBASIC's BETA 718 update changes this landscape completely, allowing VB6/VBA developers to create fully functional CTPs for all Excel versions without learning new languages or frameworks.
*Draft generated with the assistance of Claude-3.7-Sonnet.
Discord Chat Summary
* Auto-generated via Claude-3.7-Sonnet
Overview
This week's discussions centered around Excel Custom Task Panes (CTP) integration, ActiveX control licensing issues, and generics implementation. Community members shared experiences with Excel integration challenges that were subsequently addressed by the development team. Several new members joined the community, showing continued growth in interest for the twinBASIC project.
Excel Integration & Custom Task Panes
- A significant breakthrough occurred with Excel CTP support in twinBASIC. After community members identified issues with ActiveX controls in Excel CTPs, Wayne fixed the problem in Beta 718, enabling perfect compatibility across Excel 2010, 2013, 2016, 2019, and 365 in x86 versions.
- Community members shared test cases demonstrating that while VB6-compiled CTPs worked in older Excel versions, twinBASIC-compiled versions initially crashed Excel, particularly with the mso40uiwin32client.dll module.
- The fix represents a notable advantage over VB6, as twinBASIC now allows Excel CTP implementation without requiring additional ActiveX controls.
Bug Fixes & Licensing
- An ongoing issue with embedded licenses in compiled applications was identified as the cause of "ActiveX error: Automation error" when deploying to fresh machines. Wayne confirmed this is a known issue that hasn't been addressed yet.
- Memory leaks were reported when using the Array function in a loop, with continuous memory growth observed during testing.
- Issues with delegate arguments were discussed, with Wayne confirming that vbNullPtr should be allowed for delegate arguments without warnings, and that it's equivalent to passing 0 to a LongPtr parameter.
Language Features & Development
- Generics implementation continues to be challenging, with community members reporting compiler crashes when attempting to use them. The feature was discussed humorously, but remains an area needing improvement.
- A practical use case for generics was proposed: creating a generic UNREFERENCED_PARAMETER function to suppress unused parameter warnings while maintaining code clarity.
- Wayne suggested using the [DebugOnly] attribute to ensure such utility functions are removed from final builds without causing callsite issues.
Community Support
- Several new members joined the server, including experienced VB6 developers from the late 90s looking to contribute to testing efforts.
- The community confirmed that the project is very active, with four releases in the week prior to March 21st alone.
- Questions about command-line compilation were raised, with Wayne confirming this feature is not yet available.
- Wayne clarified that the WebView2 component will be included in all editions of twinBASIC, not just the Pro subscription.
Conclusion
This week demonstrated twinBASIC's continued progress toward VB6 compatibility while adding modern features. The Excel CTP fix represents a significant milestone for Office integration. The project's active development pace continues with multiple weekly releases, and the growing community of experienced VB developers shows increasing interest in the platform. While challenges remain with generics implementation and some licensing issues, the overall trajectory remains positive.
Around the Web
twinBASIC at Access DevCon Vienna 2025
Once again, I will be presenting my annual update on twinBASIC at Karl Donabauer's online Access DevCon Vienna conference.
You can check out the full conference agenda here.
The bullet points below are an excerpt from my talk on twinBASIC.
Part 1: twinBASIC - The Final Countdown
- Status update on twinBASIC's journey to v1.0
- twinBASIC's new Access-style report designer
- Creating Windows services with minimal code using twinBASIC
- twinBASIC for Applications: Could tBA replace VBA one day?
The second half of my talk will be about incorporating AI tools into the development workflow for Access developers.
Here's a link to the resources page from last year's talk, which also includes links to all my previous twinBASIC DevCon Vienna recordings:

tbSysTray
As posted by forliny in the twinBASIC Discord show-and-tell channel:
A simple packaging example for Twinbasic Systray, which allows for easy creation of tray programs. Supports 32-bit and 64 bit.
tbWinReg
As posted by forliny in the twinBASIC Discord show-and-tell channel:
A simple package of Twinbasic for Windows registry operations, which makes it very convenient to add, delete, modify, and query the registry. The program has been used in commercial projects and has undergone stress testing, so there should be no memory leakage issues. Supports 32-bit and 64 bit.
Changelog
Here are the updates from the past week. You can also find this information by visiting the GitHub twinBASIC Releases page.
AI-Generated Changelog Summary
* Auto-generated via Claude-3.7-Sonnet, sorted in order of its opinion of "most impactful changes."
twinBASIC Notable Updates
-
Fixed Form Designer Issues: Multiple improvements to the form designer, including faster command performance, corrected control rendering, and better line control manipulation during drag operations.
-
Improved TLB Generation: Resolved several issues with embedded type library (TLB) generation, fixing interface types for Object types and correcting HRESULT/VOID return types for event dispinterfaces.
-
Enhanced Excel Integration: Fixed UserControl compatibility with Excel CustomTaskPanes, resolving crashes and improving IViewObject::Draw implementation.
-
Resolved Memory Management: Addressed memory leak in the inlined Array() function call handling, and improved compiler safety around UserControl timers to prevent IDE crashes.
-
Symbol Resolution Enhancements: PredeclaredId instances now have higher resolver priority than other global symbols, improving code resolution.
WARNING: The following issues are present in BETA builds 623 - 722 (the latest build as of publication):
- IMPORTANT: This is an interim/experimental release. It includes significant changes, so some instability is to be expected. [Editor's Note: Rolling back to BETA 622 may be necessary if any of the KNOWN ISSUES below affect your project.]
- KNOWN ISSUE: Controls are not being destroyed properly by the form designer, causing big memory leaks (broken in this build)
- there are known memory leaks in these versions, so memory usage will be higher than at the Version 1.0 release
BETA 716
- fixed: tbFormDesigner_ToggleLockAllControls IDE command is now much faster inline with tbFormDesigner_ToggleLockSelectedControls [ XYplorer, discord ]
- fixed: PredeclaredId instances need higher resolver priority than other global symbols [ jovick, discord ]
BETA 717
- fixed: embedded TLB generation would use 'IDispatch' intereface for Object types, instead of the VT_DISPATCH type in TDESC [ jpbro, discord ]
- fixed: embedded TLB generation would issue HRESULT return types for event dispinterfaces instead of VOID [ jpbro, discord ]
BETA 718
- fixed: Excel CustomTaskPane UserControl crash [ forliny, discord ]
- fixed: UserControl IViewObject::Draw implementation for better compat with Excel CustomTaskPanes
- fixed: (regression in BETA 717) embedded TLB generation of 'IUnknown' arguments was changed incorrectly [ jpbro, discord ]
BETA 719
- fixed: (regression since BETA 715) internal package use of types such as STGMEDIUM / TYMED causing conflicts with user code [ jpbro, discord ]
BETA 720
- fixed: compiler safety around UC timers to prevent IDE crash [ sokinkeso, discord ]
- removed: some debug messages printed to the console when resizing a UC [ sokinkeso, discord ]
BETA 721
- fixed: (regression) memory leak in the inlined Array() function call handling [ forliny, discord ]
- fixed: IDE form designer had reversed rendering of lightweight controls [ sokinkeso, discord ]
- fixed: dragging/resizing Line control in form designer would not always immediately be reflected in next form Show/preview [ sokinkeso, discord ]
BETA 722
- fixed: further fixes for IDE form designer had reversed rendering of lightweight controls [ sokinkeso, discord ]