Текст берется из пардоксовского db файла. 
Текст сохраняется в _bstr_t строке 
 _bstr_t strValue = pRst->Fields->Item[(_variant_t)index]->Value;
Т.е. CP866 строка сохраняется в юникодной и видимо здесь и есть проблема.
Длины одинаковые до и после перекодировки
Попробовал перекодировать так: Символы изменились в исходной и полученной строке, но толку то
char *pp;
pp=static_cast<const char *>(strValue);
Попробовал через stream с помощью GetCharset посмотреть кодировку. Выдает 0, т.е. ANSI (United States, Western Europe). 
Накидал на VB. Переводит. осталось понять как это в С++ перенести
Private Sub Form_Load()
    Set Conn = CreateObject("ADODB.Connection")
    ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Lisega;Extended Properties=Paradox 5.x;"
    Conn.CursorLocation = adUseClient
    Conn.Open ConnectionString
    Dim i As Integer
    Set rs = Conn.Execute("SELECT K_FREE_HG_TEXT1 FROM KONSTZ8.DB")
    Dim str As String, dest As String
    str = rs.Fields(0)
    dest = ChangeTextCharset(str, "Windows-1251", "iso8859-1")
    MsgBox dest
    rs.Close
    Conn.Close
End Sub
Function ChangeTextCharset(ByVal txt$, ByVal DestCharset$, Optional ByVal SourceCharset$) As String
    On Error Resume Next: Err.Clear
     With CreateObject("ADODB.Stream")
         .Type = 2: .Mode = 3
         If Len(SourceCharset$) Then .Charset = SourceCharset$
        .Open
         .WriteText txt$
         .Position = 0
         .Charset = DestCharset$
        ChangeTextCharset = .ReadText
         .Close
     End With
End Function