|
Кириллица во внешней компоненте | ☑ | ||
---|---|---|---|---|
0
ДНН
18.12.20
✎
19:47
|
Есть внешняя компонента на с++, которая с помощью библиотеки winsock2 запускает прослушку TCP порта. Есть консольный клиент, который тоже на С++. Если с клиента отправить сообщение на кириллице, то в компоненту приходят кракозябры. Где и что нужно добавить, чтобы кириллица корректно обрабатывалась?
|
|||
1
acht
18.12.20
✎
19:49
|
Это тебе к Гений 1С, он по компонентам C++ специалист.
|
|||
2
ДНН
18.12.20
✎
19:50
|
(1) ему бы с Visual Studio сначала разобраться)
|
|||
3
acht
18.12.20
✎
19:51
|
(0) Надо добавлять поддержку уникода и в компоненту и в консольного клиента. 21 век за окном, как никак.
|
|||
4
ДНН
18.12.20
✎
19:54
|
(3) как ее добавить?
|
|||
5
ДНН
18.12.20
✎
19:56
|
char msg[256];
int size = recv(newConnection, msg, sizeof(msg), NULL); wchar_t* Data; Data = (wchar_t*)malloc(MaxSizeOfPacket * sizeof(wchar_t)); mbstowcs(Data, msg, MaxSizeOfPacket); вот код получения сообщения с сокета. Что нужно добавить чтобы уникод можно было получать? |
|||
6
mistеr
18.12.20
✎
19:56
|
Для начала попробуй chcp в консоли.
|
|||
7
ДНН
18.12.20
✎
19:59
|
(6) да ты гений! добавил в клиента system("chcp 1251"); и все заработало
|
|||
8
ДедМорроз
18.12.20
✎
20:41
|
Ну,вы передаёте байты,а символы они ж unicode.
Просто нужно правильно все преобразовывать. |
|||
9
ДНН
18.12.20
✎
22:27
|
Не могу через свойство передать строку. В компоненте пишу:
if (TV_VT(varPropVal) != VTYPE_PSTR) return false; m_Ip = TV_STR(varPropVal); m_Ip - мое свойство. Сделал его доступным как для чтения, так и для записи. Тип char*. В 1С пишу: ОбъектКомпоненты.Ip = "127.0.0.1"; Проверяю в отладчике, равно пустой строке. Где ошибся? |
|||
10
Garykom
гуру
18.12.20
✎
22:30
|
(9) В последней букве логина на мисте ))
|
|||
11
Garykom
гуру
18.12.20
✎
22:50
|
(9) у тебя ВК Native API ?
http://catalog.mista.ru/public/184119/ докрути до "Свойства Первое, что стоит рассмотреть – это инфраструктура свойств. Платформа запрашивает существование свойства методом FindProp" |
|||
12
Garykom
гуру
18.12.20
✎
22:58
|
(11)+ хотя лучше тут http://catalog.mista.ru/public/484743/
case 2: if(TV_VT(var) == VTYPE_PSTR) { delete[] Prop2; size_t len = std::strlen(var->pstrVal); Prop2 = new char[len + 1]; std::strncpy(Prop2, var->pstrVal, len + 1); break; } else if(TV_VT(var) == VTYPE_PWSTR) { delete[] Prop2; WCHAR_to_char(Prop2, var->pwstrVal); break; } else return false; case 3: |
|||
13
Garykom
гуру
18.12.20
✎
22:59
|
(12)+ т.е. проверь и на VTYPE_PSTR и на VTYPE_PWSTR
там таких засад дохрена |
|||
14
ДНН
19.12.20
✎
10:56
|
Внешняя компонента в бесконечном цикле ожидает новых сообщений от подключенного сокета. Чтобы прервать цикл хочу отправлять команду ClosePort. В компоненте сделал так:
while (true) { int size = recv(newConnection, msg, sizeof(msg), NULL); if (size == -1) { closesocket(newConnection); break; } if (msg == "ClosePort") { break; } wchar_t* Source, * Event, * Data; Source = (wchar_t*)malloc(MaxSizeOfPacket * sizeof(wchar_t)); Event = (wchar_t*)malloc(MaxSizeOfPacket * sizeof(wchar_t)); Data = (wchar_t*)malloc(MaxSizeOfPacket * sizeof(wchar_t)); mbstowcs(Data, msg, MaxSizeOfPacket); wchar_t* ClosePort = L"ClosePort"; if (Data == ClosePort) { break; } Connect->ExternalEvent(L"Test", L"Test", Data); } Однако в условие не попадаю, цикл не прерывается. Отправляю так: char msg1[256]; std::cin.getline(msg1, sizeof(msg1)); send(Connection, msg1, sizeof(msg1), NULL); Что опять не так? |
|||
15
H A D G E H O G s
19.12.20
✎
11:02
|
Боже, что за дичь
|
|||
16
Кирпич
19.12.20
✎
13:10
|
Автор, пройди курс по c++ для чайников, а то ты как Гений1с, ей богу. Пишу чо хочу, а работать оно обязано.
|
|||
17
ДНН
19.12.20
✎
19:30
|
Последний вопрос. Компонента собрана и под 32х и под 64х, но пока собирал перестали работать свойства и методы на русском. На английском работают. В отладчике выглядит примерно так: ОбъектКомпоненты.Статус
Где что сбилось? |
|||
18
acht
19.12.20
✎
19:33
|
Кодировка в файлах
|
|||
19
ДНН
19.12.20
✎
19:57
|
(18) Где ее поменять В VS 2019? В интернете пишут Файл - расширенные настройки сохранения файлов, но в 2019 версии нет такого
|
|||
20
acht
19.12.20
✎
20:11
|
(19) В диалоге "File" / "Save ... as" на кнопке "Save" выбрать из выпадающего списка вариант "Save with Encoding"
|
|||
21
ДНН
19.12.20
✎
20:15
|
(20) Точно. Спасибо. Но я уже сделал как тут написано https://docs.microsoft.com/ru-ru/cpp/build/reference/utf-8-set-source-and-executable-character-sets-to-utf-8?view=msvc-160
|
|||
22
Garykom
гуру
19.12.20
✎
21:37
|
кажется знаю кто студент который для гения взялся писать ))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |