Confirm the format
Run the free VBScanner on the folder. It reads the file headers and tells you what built each EXE, DLL or OCX and whether it is P-Code, native or IL.
Visual Basic 3 programs still run payroll, lab equipment and point-of-sale systems thirty
years on. Their EXEs keep the whole project inside Windows 3.1 resources, and our VB3 decompiler
reads it back into exactly what a VB3 developer would expect: a text .MAK, text
.FRM files with their .FRX resources, .BAS modules, VBX
properties by name, real event-handler names and structured Basic.
See a real VB3 recovery, VisData, next to its original source →
A VB2 or VB3 executable is a 16-bit NE image whose project lives entirely in RCDATA
resources. Resource 1 is the project object table — one record per form, per VBX file and per
control class. Resource 2 holds global data, constants, Type descriptors and the chain
of code modules. Then, for each form, an even-numbered resource carries the binary form designer
and the odd-numbered one its control-name pool. The designer blocks are byte-compatible with a
loose binary .FRM file, so one parser serves both.
Code is P-Code for the VBRUN300 interpreter. The decompiler recognises each statement boundary
the same way the runtime does — by the token whose handler advances the per-statement counter —
and property ids are read from the binary rather than hard-coded, because VB3 assigns them
per project: id 14 is DragIcon in one program, Tag in another and
Width in a third.
Text .MAK, one text .FRM per form plus .FRX, and MODULEn.BAS files — the format VB3 itself reads, and the starting point for VB4's upgrade path if you want to move forward.
The full control tree with nesting. VBX properties are decoded by name from the shipped .300 descriptors — per-class property lists plus 43 standard properties — so third-party controls are not left as blobs.
717 of 717 handler names correct across the benchmark corpus, none invented, with parameter lists, Sub-versus-Function and return types exact on all 915 procedures.
If / ElseIf / Else, Select Case (jump-table and linear forms), Do / Loop, While / Wend, For / Next, line labels, GoSub / Return, On Error, the graphics statements (Line, Circle, PSet, Scale, Point), typed Dim / Global / Const blocks and real Win16 Declare signatures.
| Metric | Result |
|---|---|
| Control property values vs original source (1,180 controls, 22 Microsoft samples) | 7,514 of 7,522 — 99.9% |
| Procedures, parameters, Sub/Function kind, return types | 973 of 973 · 915 of 915 |
| Event-handler names | 717 of 717, none invented |
| String literals reproduced verbatim | 1,073 of 1,073 |
| Statements emitted | 5,034 of 5,133 — 98.1% |
| Lines matching the source exactly | 2,982 of 3,053 — 97.7%; all 71 misses are bracketing or a coercion the P-Code does not keep |
Win16 Declare signatures | 56 of 58 (the two are ODBC) |
VB3 stores event-handler names but not the names of general procedures, modules, locals,
globals or type members. They come back as stable invented names — MODULE1.BAS,
sub1A3C, gv0040 — that you rename as you read. Comments are gone. A VBX
whose .300 descriptor we do not have cannot have its properties named, so send the
VBX along. Any statement the engine cannot decode is marked ' . . . not decoded,
never guessed. DoDi's classic VB3 decompiler ships alongside ours for a second opinion.
Run the free VBScanner on the folder. It reads the file headers and tells you what built each EXE, DLL or OCX and whether it is P-Code, native or IL.
License the software — $299 for one computer or $1,499 for your whole organization with the command line — and run it on your own machine. Nothing leaves your network.
Request a free evaluation. We examine the binary, tell you exactly what comes back, and quote a fixed price and timeline. Hand-finishing of anything the engine marks is included.
The output is in VB3's own format, so VB3 opens it directly. VB4 can load and upgrade a VB3 project, and VB5/VB6 open VB4 projects, which is the usual path to a 32-bit build.
Yes, as long as the VBX is available: properties are decoded from the control's descriptor and named. Include the VBX files with your evaluation.
On Microsoft's own sample programs, 98% of statements are emitted and 97.7% of lines match the original exactly; the rest are marked in the output rather than filled in.
The evaluation is free and tells you exactly what your binary yields before you spend anything. Or license the decompiler and run it in-house today.