For the VC++ side, make sure you have more than just the pre-processor definition. Check out the Project Properties -> General -> Project Defaults -> Character Set setting too. For the VB6 side, I'm pretty sure VB6 uses Unicode to store strings internally (going off of memory). But, that doesn't mean the app is Unicode enabled. The VB runtime will most likely convert the string into whatever code page the system is running. Now, for lower end chars in something like UTF-8 this isn't an issue... BUT... when VC++ says Unicode they mean UTF-16. So there will be a byte alignment issue where the Unicode DLL is treating every two characters as one for your prodId, for instance. I'm not sure of the error you're getting, but if you're looking to interface VB6 with a DLL, you may be better off using Multibyte Character Set (MBCS)[^]. I haven't verified it, but MBCS is probably closer to what VB6 is doing anyway.
Jeremy Falcon