|   |   | 
| 
 | Кириллица во внешней компоненте | ☑ | ||
|---|---|---|---|---|
| 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 | 
        кажется знаю кто студент который для гения взялся писать ))     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |