To start with, I have limited knowledge and may be wrong somewhere in my reply. So please keep that in mind.
.dll stands for Dynamically Linked Libraries. They contain some functions that can be reused by some other applications. For example lets say there is a file called date.dll which contains functions to convert between different date format, function to find out the current system date format, etc. Now you would like to use this in almost all the applications you develop. So rather than including them in all the applications, you would keep them in an external dll file and use it from all the applications. Advantages will be that sizes of the applications will not bloat, secondly updation will be very convenient. If you find some error in date conversion function, just replace the dll file and all applications will be updated.
.ocx are ActiveX Controls. For example, for a VB programmer, all the things that they can put on a form (and also many other things) are activeX controls. They carry with them properties and methods associated with it which gives convenience to the users. Reusability is the key here.
.drv are device drivers. Software needs to interact with hardware. It is done through the device drivers. In simpler terms, software and hardware uses different languages. .drv files are the interpreters
I don't know what are .cpv files
