Well they are partially right. Typically a VB6 environment generates ActiveX Dll files which are files that make use of a separate linker and links it in such a way that it is not considered a Windows DLL. It doesn't create a standard export file to let other languages know what functions it has and is used as an activeX object. Secondly it doesn't usually go deep enough to listen to hardware and communicate with hardware on a low level language. But you can rig VB6 to generate true Windows DLLs, by first creating an export file with the project, intercepting its call to the linker application and modifying its parameters. Most people find this process a bit tedious and it can be. But it can be done with a little hard work.
However most people just go with the easier route of creating a Win32 DLL in C++ which also has the power to go to the level of hardware. Most drivers for your hardware (like the keyboard and mouse) are actually DLL files written in C/C++ believe it or not.
So in short, the guy is right in the general case, but VB6 can generate windows DLLs with a little modifications. If you can I would go with C++ and just write it all out. It will make modifications easier later as well and there is little less of a chance of screwing your software up by misconfiguration.
Hope that helps answer your question.
"At DIC we be DLL creating code ninjas!"