использование функции WinAPI MultiByteToWideChar из 1С 8 #567068


#0 by gherkin
Здравствуйте! Подскажите, пробовал ли кто-нибудь использовать функцию MultiByteToWideChar WinAPI из 1С 8? Если да - с какими типами параметров регистрировали? Поясняю: Мне нужно считать данные из таблицы Paradox. Там используется кодировка ANSI. Пытался перекодировать в OEM вот так: В результате 1С выдала сообщение о неизвестной ошибке. Или подскажите другое решение, пожалуйста. Спасибо
#1 by Rebelx
можно таблицу сделать - коды символов и сами символы
#2 by gherkin
Я уже думал об этом. Но хочется сделать все по-нормальному :-)
#3 by H A D G E H O G s
Как бы MultiByteToWideChar это для перевода из "многобайт" в unicode. Какие OEM?
#4 by H A D G E H O G s
ApiFunctions.MultiByteToWideChar(КодировкаТекста.ANSI,КодировкаТекста.OEM Нормально так. В API функцию (пусть и в обертке) отправили гулять COM объекты.
#5 by H A D G E H O G s
Аутор, че надо то? Как paradox читаешь то? Код покажи.
#6 by gherkin
#7 by Мутабор
Почитай тама
#8 by H A D G E H O G s
У мя 1С выдала {Форма.Форма.Форма}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft JET Database Engine): Внешняя таблица не имеет предполагаемый формат. Хотя Дельфя нормально ADO запрос отрабатывает через JET. Табличка - Paradox 3.5 (где вы такое старье откопали).
#9 by Sk0rp
, А что за странный второй параметр: КодировкаТекста.OEM ? Там должно битовое поле флагов идти. Обычно используют MB_PRECOMPOSED #define MB_PRECOMPOSED            0x00000001 Да для первого параметра стоит использовать CP_OEMCP #define CP_OEMCP 1 Чему там равно КодировкаТекста.OEM еще ХЗ. Четвертым параметром для null-terminated строк обычно передают -1. А для приемного буфера стоит выделить места побольше, т.к. будет еще попытка записать конечный ноль, а он тоже места просит. Т.е.
#10 by Sk0rp
+ Для первого параметра: CP_ACP, конечно #define CP_ACP                    0
#11 by gherkin
В BDE надо поменять язык драйвера на "Pdox ANSI Cyrillic"
#12 by gherkin
где вы видели #define в 1с 8?
#13 by Sk0rp
Нигде, так же как и функцию MultiByteToWideChar это способ показать, чему должен быть равен параметр.
#14 by gherkin
прошу прощения, не понял сначала
#15 by gherkin
и мне интересно, какое значение во второй параметр пихать.
#16 by trdm
>> MultiByteToWideChar осторожно с этой функцией, ей надо подавать готовый буфер, иначе отгребешь.
#17 by gherkin
строку подключения заменить на СтрокаСоединения = "Provider=Microsoft.Jet.OLEDB.4.0; но сразу говорю - ничего не изменится )
#18 by H A D G E H O G s
Тех же щей.
#19 by gherkin
попробовал так: может, надо не 1251, а что-то другое подставить. Если да - подскажите, что?
#20 by gherkin
у меня такая ошибка была именно из-за языка. Больше ничего в голову не приходит. Код рабочий, проверено
#21 by H A D G E H O G s
Так. Все работает. Таблица Paradox 7, язык драйвера pdox ansi cyrilic Колонка Name, значение в ней - "Тест" 1С-ка выводит "Тест" при Сообщить(rs.Fields("name").Value); ОК?
#22 by H A D G E H O G s
1С сама в utf8 перевела.
#23 by gherkin
ппц снова попробовал, уже без перекодировки. У меня все по-прежнему - кракозябры. Может, ODBC не тот? У меня не стоит MS Office.
#24 by gherkin
22 пост был к 21
#25 by gherkin
23 к 21
#26 by H A D G E H O G s
Пришли обработку и db-шник (хоть бы и с 1 записью).
#27 by acsent
Кодировку нужно указывать в строке соединения
#28 by aleks-id
попробуй так: и еще поколдуй в строке подключения с параметром Character Encoding
#29 by gherkin
такая строка подключения не работает (оба варианта)
#30 by gherkin
выслал
#31 by aleks-id
|Jet OLEDB:Character Encoding=UTF-8;";//может быть |Jet OLEDB:Character Encoding=""UTF-8"";";
#32 by gherkin
все равно не работает. И просто через драйвер тоже
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С