The difference between ActiveX DLL and ActiveX EXE is small but very important.
It's possible to have code for a DLL and compile it into an EXE. The difference is the project type.
DLL - runs in the same memory space as the calling program. Each time you set a reference in VB to, say, ADO you are referencing a DLL that is running in the same memory space as your program. By doing this, your app will run faster, but it is less secure. How? If the DLL crashes, it will bring down your application as well. These are also called "in-process" components or servers.
EXE - runs in a seperate memory space from the calling program. It's a little slower because the machine has maintain two memory pointers for your app (in a sense). These are also called "out-of-process" components or servers.
The deciding factor when choosing which one to use basically comes down to:
What are willing to trade to get the best performance? Speed or security? On today's machines though, yuo have to wonder, are you going to notice the several millisecond differnce between in and out of process components?
Oh BTW - to register an ActiveX DLL you call RegSvr32.exe "yourdll.dll"
but to register and an ActiveX EXE you call your exe and pass /register on the command line...
"MyActiveX.exe /register"