The call to WideCharToMultiByte takes a code page as an argument (if you
leave it blank it uses the default code page).

When you convert a string with Unicode characters to "multi-byte", you are
actually converting it to a legacy, non-Unicode, character set. Only the
characters actually supported by the character set will be converted. All
other characters will turn into "?" (on Western European systems) or
"_" (on Asian systems).

Generally you will only call WCTMB when you wish to display characters in
a command line environment or in a non-Unicode (window type is "A" instead
of "W") window... as on Windows95. If you plan ONLY to target WinNT, I
respectfully suggest you think about strictly using Unicode in your
program.

Side note: if you are seeing black squares instead of "?", your conversion
is working, but you are using the wrong font to display the characters.

Finally: if your program is a command line program, then you can change
the active code page of 'cmd' by using the 'chcp' command. The code page
you use in WCTMB and the code page of your window have to match.