I'm stepping into the game a bit late...
We have a large project compiling into a WLL (written in VC++ 6, of course).
The COM Add-In interface is preferable, but if you must support Word 97, a
WLL will suffice too. It doesn't have any complex interface, hardly any
interface at all, hence some difficulties you might have, in particular
initially obtaining the Word.Application reference, but that's doable too. A
WLL is a regular Windows DLL plus two special functions: wdAutoOpen and
wdAutoRemove, which just let you do some setup/shutdown. No more, no less.
If VB can't produce regular Windows DLLs, you can definitely create a simple
C/C++ wrapper for your "ActiveX" DLL: You instantiate the COM object,
similarly to how Lars-Eric showed, and then delegate the actual handling to
it. In fact, it may suffice to do this only once, on startup, when you set
up toolbars, menus and/or Application/Document object events. The handlers
of all these commands/events can be directly in your VB DLL.
Good luck.
// Chango