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