Techniques Index

Click for RunTime Debug Tracing

RunTime Debug Tracing

Sometimes you want to be able to view trace messages when running your application outside the VB IDE. Perhaps something slightly different happens as an Executable; or you may be running something that's not so easy to debug, such as subclasses, callback procedures and custom COM implementations. Whilst VB provides an App.LogEvent method which supposedly caters for this, it isn't very good. This article provides an easy way to send debug messages to a remote trace application for your viewing and logging pleasure.


Last Updated: 3 February 2003

Click for Finding Which DLL Contains an API Call

Finding Which DLL Contains an API Call

The API Text Viewer provided with VB is a reasonable source of Win32 API call declares. However, the Win32 API is continually expanding, and there aren't many (if any) updates to the database of calls. Whilst MSDN Online provides you with most of the documentation you need to implement a new call, there's normally one thing missing: which DLL will you find the call in? For example, it isn't clear that the AlphaBlend function in the GDI section is actually implemented in MSIMG32.DLL. This article describes how to find which DLL you need using the Platform SDK and provides a search toy for doing it.


Last Updated: 14 January 2003

Click for A Fast Index-Based Collection

A Fast Index-Based Collection

VB provides a simple Collection for storing objects. However, this object is internally implemented as a hashed linked list, and as such provides good performance for access either by an item's key or through enumeration. If you want to access an object by its index, however, you need to enumerate through all the items until you reach the correct one, which is slow. This article presents an alternative collection which is optimised for access by index, and, for large numbers of items, runs over 100x quicker than the VB equivalent.


Last Updated: 2 January 2003

Click for StringBuilder Class for VB

StringBuilder Class for VB

If you need to build a string by adding lots of pieces together, VB's string handling is slow because a new string is created in memory every time a new piece is added. This article presents a class which allocates a string chunk and then uses memory copy methods to manipulate the data within the same string's memory. The result is a string class which can perform orders of magnitude quicker than the equivalent VB code.


Last Updated: 1 January 2003

Click for Dealing with Circular References

Dealing with Circular References

VB and COM makes a lot of things easy to do, particularly using and dealing with objects: you just create them and normally they clear themselves up automatically once you're finished with them. However, one side effect of the way COM works is that it is possible to create objects which cannot terminate properly: this problem is known as a "Circular Reference".

The effects of a circular reference can range from using more memory than you ought to (possibly to the extent that you get an Out Of Memory error) to much harsher effects when you are experimenting with API calls.


Last Updated: 23 December 2002

Click for Link Spoof

Link Spoof

LinkSpoof is a sample from Robert Heinig ( demonstrating one technique to take over the VB6 compile process in order to compile your own code into the finished executable.


Last Updated: 15 November 1999

Click for Component Base Addresses

Component Base Addresses

Every in-process component has a Base Address associated with it. When an application loads the component, the Win32 DLL routines are invoked. Approximately speaking, the component is placed in a memory location according to its Base Address. If two components have the same base address, a conflict occurs, and time is wasted as all the offsets within the second component are adjusted.

You can make things run quicker if you specify unique base addresses for your components in advance.


Last Updated: 15 November 1999

Click for malloc in VB?

malloc in VB?

Of course you're not supposed to allocate your own memory in Basic. Don't be so silly, what are you thinking of? And you should stop using that CopyMemory call and certainly those pointers should not be there at all.

Just in case you're not feeling like any sort of Basic purist, this article is here to show you how to create little chunks of memory completely independently of variables or classes, how to access their contents, reallocate them and free them.

Just don't tell your boss that this is what you're doing...


Last Updated: 25 August 1999

Click for Storing Objects Against ItemData and Tag properties

Storing Objects Against ItemData and Tag properties

ListBox and Combo boxes have an ItemData property to allow you to store an additional long value against each ListItem. Similarly, ListView items and TreeView nodes have a Tag property which can be used to store a string. But what if you want to associate more data along with an item? Clearly you can make some use of a long value to store a key, or use the bitfield technique to store multiple items. With a string you can generate cunning schemes to store multiple strings and numbers in the same string. But it would be a lot nicer if you could just store an object against each item. Then data of any complexity can be stored against the item just by setting the item data to point to the instance of the object.

This article explores three methods you can use to store objects using only a long value to store the object, and hence you can associate the long value with either the ItemData property of a List or Combo box, or (by using CStr and CLng) with the Tag property of Microsoft control.

The uses don't stop there. You can replace VB's collection object with an object that runs up to 100x faster. You could attach custom class data to the items in an S-Grid control. Take advantage of the technique when building controls directly from the API to store lots of data in the lParam member of the items... this is great stuff!


Last Updated: 15 August 1999

Click for How to Trap the Tab Key in a UserControl with IOLEInPlaceActiveObject

How to Trap the Tab Key in a UserControl with IOLEInPlaceActiveObject

Right. You are trying to create a control in VB, and your control has to catch the Tab key. It might be a grid, where you would expect tab to move between cells, or it might be an editor control. This is not an unreasonable request of any programming language which lets you create a control. Or is it? Want to go mad? You will if you try to intercept Tabs properly in VB unless someone tells you the answer...


Last Updated: 20 February 1999