Something like this should work (bnot tested, I am not an expert at all...):
Declare Function GetH DDSerialNumberLib "wmi.dll" (Drive as string) as string
I wouldn't know how to handle an optional parameter (the drive letter) in a call to a function in a dll, though.
Another issue that comes to my mind is that if you use a dll created using VB.NET, there is a possibility that it requires the corresponding framework to be installed on the machine running your application, which could be problematic. If that's the case, I would think it is better to use a direct windows API call. Have you checked the Windows Functionality Suite?