VB6 vrs .NET (again)

Author: Dave
Date: 10.03.12 - 5:16am

So .NET is now almost 11 yrs old (Feb 2002). VB6 is almost 15, (1998).

I tinker in C#. There is a lot of existing code now for it that can save me time. The .NET framework and having large debugged libraries available is nice, but there are still tradeoffs.

Vb6 is a dead language according to some definitions. In reality though, since it still works, its actually one of the most stable languages you will find. No break neck innovation, no one is whipping up new features that keep your head spinning. Its a stable environment. We know what it does, we know what it doesnt do, and there is a load of public code available for it.

If you arent familiar with the VB6 IDE, here is a quick video I made showing its strengths and a few reasons I still use it.

One gripe with vb6 was that it needs the 1mb vb runtime installed in order to run on a system. Also if you wanted other features such as listviews, or progress bars you had to include references to external ocx or dll files which made distributions harder.

.NET actually took that mess to a whole new level. At the present moment I have 4 seperate versions of the .NET runtimes installed on my system each taking up hundreds of MB of disk space, and each requiring at least 20-30 minutes to download and install.

How about all of the fancy features of .NET compared to the basic class structures of vb6? Honestly I find vb6 simpler and more direct. Typing in .NET code is very verbose, as you walk your way through the different classes and enums. Also all of the advanced object oriented class features such as polymorphism. They are stressed a lot, but in reality you can write an awful lot of code without having to use such features. Complexity and error are closely related.

Granted there is some liability in using VB6 for new products. There may come a day when it will cease to operate or bugs crop up in future operating systems, or more likely, that you will need some capability that cant be done in VB6 cleanly.

How is it that a decade latter, I still find myself reminiscing, and ranting on the new architecture? I guess to me, VB6 is still my perfect "get shit done quick" language due to its directness and simplicity. I am also lucky that I only really write research applications.

A danger of new technologies is that they tend to thrash about in the evolution process. Thank god i didnt start developing any code for windows phone! They have had several complete incompatible shifts in technology over the years and the phone still has poor market share.

Its amazing how many boutique programming languages are out there. This even extends to corners of the .NET framework such as WPF.

Mastery is being able to obtain a simple elegant answer even while interfacing with a complex (or even chaotic) system. Stability is virtuous.

Comments: (10)

On 11.18.13 - 11:47pm Daniel Duta (Bucharest, Romania) wrote:
Hello Dave, It is more than a blog, I would say it is a programming tutorial. I was very happy when I read your opinions regarding VB6 vs .NET. It is interesting that a young guy like you has such a philosophical view of programming - Complexity and error are closely related. Another guy, Olaf Schmidt (unfortunaly banned by si_the_geek after a technical debate ...), has similar ideas considering that VB6 is more open to improvements than other languages and he preferring to spend time in this sense - see his site www.vbrichclient.com . Your both views are even more interesting to considering the new generation madness regarding C#,Java, phone apps Android. I really love your inline injections within VB6 and often I feel you are able to reveal pieces of a lesser-known world. Good luck! This weekend I will read all your post from the blog.

On 12.06.13 - 6:10am Dave wrote:
One more additional thought. The more complex tools you give people, the more complex "solutions" they may come up to problems. I am reading through someone elses code right now. They are making things way more complex than they have to such as using a delegate set in an if else statement, instead of just calling the desired function within that same if else. Or declaring functions as static needlessly which then has effects on member accessibility. Complex language attributes can (in the right situation and in the right hands) equal elegant solutions, but for the majority I think it just makes a needless mess.

Another: .NET throws allot of needless errors. Clipboard.SetText(0 length string) = exception. really? I dont care, I just cleared it. There is no value to that exception. Im also not shy in saying i still love On Error Resume Next. there are allot of things its perfect for such as form resize code.

On 12.16.13 - 5:43am Dave wrote:
here are a couple more ways .net ide is inferior to vb6
  • the code navigation combo boxes at the top of the editor window, in vb6 you choose the object on the left one, and the events on the right, in .net 2008 they are all jumbled together on the right.

  • break and edit, in vb6 hitting pause put the entire codebase into source editable mode. you could make changes on the fly really easily. in .net you have to set a breakpoint and hit it before you can edit live. also the edit and continue is problamatic. not all changes can be applied like this

  • The class/property hierarchy is so loaded with crap, including base object methods that the intellisense menus are miles long instead of being clean and concise. Some people may argue the extra features are worth it. I am not one.

  • vb6 supports optional arguments. waaay better than having to write a bunch of stubs for overloads, which you then have to click through one by one to see them all in the bulky intellisense menu. wtf really?!

On 01.20.14 - 4:13am BioMeg wrote:
Visual Basic 6 is the best ! Thank you for this video Dave.

On 02.23.14 - 4:00pm Dave wrote:
Another one I dont think I have mentioned yet. I LOVE that VB6 does not have a default null type for variable and function returns. It is so nice being able to just exit function and know that the default value of the return is false for booleans or an empty string. It makes your code way more readable and all of those null object checks you have to liter your code with C# have negative value in my book. A higher level language should do more for you, not require you to be super anal.

On 02.23.14 - 4:02pm Dave wrote:
also @BioMeg, I saw the advanced submissions you have tracked down and are keeping alive on PSC. Thats a great idea, thanks right back :)

On 04.06.14 - 12:53pm Sten wrote:
Dont forget the Vote for an updated VB6 at http//visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3440221-bring-back-classic-visual-basic-an-improved-versi

On 06.28.14 - 9:11am Dave wrote:
Here is a succinct definition of why I cant leave VB6.

It is a simple and direct language without over complication. It is fast and can do 90% of my general programming requirements directly. For the other 10%, it can integrate very easily with C/C++ through either COM or direct API declares.

its still a winner, and I will use it until something better comes along...

On 06.07.17 - 9:40am VB6 Programming wrote:
Microsoft support VB6 for the lifetime of Windows 10, so until at least 2025. And for the lifetime of Windows Server 2016, until at least 2027. https//docs.microsoft.com/en-us/dotnet/visual-basic/reference/vb6-support

On 05.26.24 - 8:24pm Sten wrote:
The new twinBASIC programming language can import VB6 source code.

Leave Comment:
Email: (not shown)
Message: (Required)
Math Question: 3 + 52 = ? followed by the letter: O 

About Me
More Blogs
Main Site
Posts: (year)
2024 (2)
     ffmpeg voodoo
     RegJump Vb
2023 (9)
     VB6 Virtual Files
     File handles across dlls
     python abort / script timeout
     VB6 Python embed w/debugger
     python embedding
     VB6 IDE Enhancements
     No Sleep
     A2W no ATL
2022 (4)
     More VB6 - C data passing
     Vb6 Asm listing
     Byte Array C to VB6
     Planet Source Code DVDs
2021 (2)
     Obscure VB
     VB6 IDE SP6
2020 (4)
     BSTR from C Dll to VB
     Cpp Memory Manipulation
     ActiveX Binary Compatability
2019 (5)
     Console tricks
     FireFox temp dir
     OCX License
     Extract substring
     VB6 Console Apps
2018 (6)
     VB6 UDTs
     VB6 Debugger View As Hex tooltips
     VB6 - C Share registry data
     VB6 Addin Missing Menus
     VB6 Class Init Params
     VB6 isIn function
2017 (6)
     Python and VB6
     Python pros and cons
     download web Dir
     vc rand in python
     VB6 Language Enhancement
     Register .NET as COM
2016 (22)
     VB6 CDECL
     UDT Tricks pt2
     Remote Data Extraction
     Collection Extender
     VB6 FindResource
     DirList Single Click
     Reset CheckPoint VPN Policy
     VB6 BSTR Oddities Explained
     SafeArrays in C
     BSTR and Variant in C++
     Property let optional args
     Misc Libs
     Enum Named Pipes
     Vb6 Collection in C++
     VB6 Overloaded Methods
     VB6 Syncronous Socket
     Simple IPC
     VB6 Auto Resize Form Elements
     Mach3 Automation
     Exit For in While
2015 (15)
     C# self register ocx
     VB6 Class Method Pointers
     Duktape Debug Protocol
     QtScript 4 VB
     Vb6 Named Args
     vb6 Addin Part 2
     VB6 Addin vrs Toolbars
     OpenFile Dialog MultiSelect
     Duktape Example
     DukTape JS
     VB6 Unsigned
     .Net version
     TitleBar Height
     .NET again
     VB6 Self Register OCXs
2014 (25)
     Query Last 12 Mos
     Progid from Interface ID
     VB6 to C Array Examples
     Human Readable Variant Type
     ScriptBasic COM Integration
     CodeView Addin
     ScriptBasic - Part 2
     Script Env
     MSCOMCTL Win7 Error
     printf override
     History Combo
     Disable IE
     API Hooking in VB6
     Addin Hook Events
     FastBuild Addin
     VB6 MemoryWindow
     Link C Obj Files into VB6
     Vb6 Standard Dlls
     CStr for Pascal
     Lazarus Review
     asprintf for VS
     VB6 GlobalMultiUse
     Scintilla in VB6
     Dynamic Highlight
     WinVerifyTrust, CryptMsgGetParam VB6
2013 (4)
     MS GLEE Graphing
     printf for VB6
     C# App Config
     Tero DES C# Test
2012 (10)
     VC 2008 Bit Fields
     Speed trap
     C# Db Class Generator
     VB6 vrs .NET (again)
     FireFox Whois Extension
     git and vb6
     Code Additions
     Compiled date to string
     C# ListView Sorter
     VB6 Wish List
2011 (7)
     C# Process Injection
     CAPTCHA Bots
     C# PE Offset Calculator
     VB6 Async Download
     Show Desktop
     coding philosophy
     Code release
2010 (11)
     Dll Not Found in IDE
     Advanced MSScript Control
     random tip
     Clipart / Vector Art
     VB6 Callback from C#
     Binary data from VB6 to C#
     CSharp and MsScriptControl
     HexDumper functions
     Js Beautify From VB6 or C#
     vb6 FormPos
     Inline Asm w VB6
2009 (3)
     The .NET Fiasco
     One rub on computers
     Universal extractor