ситуация такая:
на входе имеем unicode строки в РАЗНЫХ кодировках (англ., русский, немецкий итд.)
загоняю их в VB строку используя WinAPI WideCharToMultiByte
в итоге получается какая-то ерунда с символами по умолчанию, а-ля “?????”
(пробовал и “родную” для VB StrConv – результат тот-же)
по идее WideCharToMultiByte ДОЛЖНА конвертировать в соответствии с ПЕРЕДАВАЕМОЙ как параметр codepage, а получается что правильно всё работает если кодировка исходной строки СОВПАДАЕТ с установленной в системе (ACP, OEMCP & Co.)
Сначала подумал что грешит обработка строк в VB – где-то внутри что-то автоматом преобразовывается в установленную codepage. Неа, в массив загоняется та же ерунда.
короче лажа полная и убивает наповал

( Может кто-то знает где грабли ? Огромное пре-спасибо заранее.
ЗЫ WIN2K
ЗЫЫ поиском нашёл просто МОРЕ всякой информации связанную с unicode но нигде не описана работа с разными кодировками одновременно
На всякий случай код:
Private Const ERROR_INSUFFICIENT_BUFFER As Long = 122
Private Const ERROR_INVALID_FLAGS As Long = 1004&
Private Const ERROR_INVALID_PARAMETER As Long = 87
Public Enum Codepage
'пропушено – ....
End Enum
Private Enum WMFlags
WC_COMPOSITECHECK = &H200
WC_DISCARDNS = &H10
WC_SEPCHARS = &H20
WC_DEFAULTCHAR = &H40
End Enum
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal Codepage As Codepage, ByVal Flags As WMFlags, ByVal WideChar As String, ByVal WideCharCount As Long, ByVal Multibyte As String, ByVal MultiByteCount As Long, ByVal DefaultChar As String, ByVal DefaultCharUsed As Long) As Long
Public Function Multibyte(ByRef Codepage As Codepage, ByRef Value As String) As String
Dim Response As Long
Dim DefaultCharUsed As Boolean
Dim Flags As Long
Response = WideCharToMultiByte(Codepage, 0, Value, -1, Multibyte, 0, 0, 0)
If Response = 0 Then
Select Case Err.LastDllError
Case Is = ERROR_INSUFFICIENT_BUFFER
Err.Raise 5000, , "Multibyte:" & "Insufficient buffer."
Case Is = ERROR_INVALID_FLAGS
Err.Raise 5000, , "Multibyte:" & "Not valid flags."
Case Is = ERROR_INVALID_PARAMETER
Err.Raise 5000, , "Multibyte:" & "Not valid parameter."
End Select
End If
Multibyte = String$(Response, 0)
Flags = WC_SEPCHARS
Response = WideCharToMultiByte(Codepage, 0, Value, -1, Multibyte, Response, "?", DefaultCharUsed)
End Function