data.bstrVal returns a BSTR - 16-bit wide utf-16
What's this: dbuff[dcount] = char (k[0]);
I read it as: dbuff[0] = char (k[0]); you are setting one byte sized char to the 8 least significant bits of the first unicode character in the BSTR assigned to k.
or there is a lot of code missing ....
Update
TurboPower Async Professional[
^] can be used with C++ builder. There are lots of examples and good docs.
Also try
Thinking in C++ 2nd Edition[
^] by Bruce Eckel, Free Electronic Book
Volume 1 & Volume 2
Regards
Espen Harlinn