Recent

Author Topic: Кирилические имена функций  (Read 7240 times)

Mr. George

  • New Member
  • *
  • Posts: 21
Кирилические имена функций
« on: September 15, 2021, 08:08:09 pm »
Добрый вечер!

Имеется 1с, подключаюсь к ней через ком объект.
Внутри 1с методы написаны на кирилице.

В делфи можно писать нечто такое:

Code: Pascal  [Select][+][-]
  1. Connection:=CreateOleObject('V83.ComConnector');
  2. c:=Connection.Connect('File="E:\test"; usr=""; pwd=""');
  3. version:=c.ОбщийМодуль.ПолучитьВерсию();
  4. ShowMessage(version);
  5.  

В лазарусе ругается на русские символы при компиляции.
А именно на c.ОбщийМодуль - "О" не корректный символ.

Есть какое-то решение?
Или это болячка из-за отсутствия полноценной поддержки юникода?

tetrastes

  • Sr. Member
  • ****
  • Posts: 473
Re: Кирилические имена функций
« Reply #1 on: September 15, 2021, 10:26:57 pm »
А что, UTF8 - не полноценная поддержка Юникода?
Только причем здесь поддержка Юникода?

Естественно, что не латинские буквы в коде не поддерживаются:
https://www.freepascal.org/docs-html/current/ref/refse1.html#x9-80001.1
как, впрочем, и в других широко используемых языках программирования.

Что касается поддержки кириллицы в коде Делфи, если это действительно так, то это ее извращение (пардон, расширение), до которого FPC еще не дорос. Я с Делфи лет 20 дел не имел, и насколько я помню, тогда такого не было. Интересно, а китайские иероглифы в коде Делфи тоже допускает? Ну или хотя бы иврит с арабским...
« Last Edit: September 15, 2021, 10:28:55 pm by tetrastes »

Mr. George

  • New Member
  • *
  • Posts: 21
Re: Кирилические имена функций
« Reply #2 on: September 15, 2021, 10:56:50 pm »
В lazarus нет полноценной поддержки юникода в отличии от делфи, это касается RTL в частности.
Какие-то функции продублированы с припиской UTF8, другие не имеют таких аналогов.
В делфи все строки по дефолту utf16, это касается и кода и всех компонент и RTL.
Очень удобно, кстати. Где-то читал, что лазарус тоже к этому идет, но пока далеко.

Quote
Естественно, что не латинские буквы в коде не поддерживаются
Понятно.

Quote
Что касается поддержки кириллицы в коде Делфи, если это действительно так, то это ее извращение (пардон, расширение)
Это сквозное повсеместное внедрение юникода c делфи 2009.
Начиная от модулей, заканчивая отладчиком.
Иероглифы тоже входят в юникод, так что да, работает.
Извращение будет писать на FPC код для работы через ком с 1с (для СНГ реальный кейс).
Наверно, что то такое получилось бы: https://forum.mista.ru/topic.php?id=821381

Спасибо за ответ.
Пришлось сделать на делфи, быстро и просто, благо, есть возможность.
И библиотеки типов делфи лучше считывает, авто генерируемый модуль более правильный.
« Last Edit: September 15, 2021, 11:01:20 pm by Mr. George »

tetrastes

  • Sr. Member
  • ****
  • Posts: 473
Re: Кирилические имена функций
« Reply #3 on: September 15, 2021, 11:42:36 pm »
Quote
В lazarus нет полноценной поддержки юникода в отличии от делфи, это касается RTL в частности.
RTL относится к FPC, а не к Лазарусу. И вполне может работать с utf16.
Проблема не в RTL, а в том, что FPC не поддерживает нелатинские буквы (может лучше сказать не ASCII символы) в коде.

Quote
В делфи все строки по дефолту utf16, это касается и кода и всех компонент и RTL.
Очень удобно, кстати.
Ну да, особенно для Линуха, МАКоси и прочих юниксов.

Quote
Иероглифы тоже входят в юникод, так что да, работает.
Подозреваю, что только в винде, и если исходник в utf16 (а то может и в UCS2 только).

Quote
Извращение будет писать на FPC код для работы через ком с 1с
Не спорю, ибо тут все извращение - ком как таковой и 1с с ее кириллическими функциями  ;)

ASerge

  • Hero Member
  • *****
  • Posts: 2223

skalogryz

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2770
    • havefunsoft.com
Re: Кирилические имена функций
« Reply #5 on: September 20, 2021, 10:00:21 pm »
Извращение будет писать на FPC код для работы через ком с 1с (для СНГ реальный кейс).
Наверно, что то такое получилось бы: https://forum.mista.ru/topic.php?id=821381
и да и нет.
Похоже, что на C# приходится тоже вызывать методы явно

потенциально dll-ку можно импортировать и один раз получить описание методов.
(один фиг вызов метода происходит по Id)
Да, они не будут на русском языке, ну потому что FPC не позвляет использовать ничего кроме латиницы для имён идентификаторов.
но может и код стал бы выглядеть более одинаковым.

Mr. George

  • New Member
  • *
  • Posts: 21
Re: Кирилические имена функций
« Reply #6 on: September 20, 2021, 10:43:48 pm »
Если нет цели держать весь код на FPC,
для столь специфичной задачи, как подключение к 1с, по потихоньку подыхающей технологии, куда уместнее использовать самое простое решение, если оно работает.
В данном случае, скачать бесплатную делфи community edition (если нет лицензии) и сделать решение в лоб, с русскими буквами, код максимально короткий, простой и читаемый.
К тому же, импортированная библиотека типов выглядит более правильно.
C# не показатель, от вида конструкций этого языка и структуры проекта иногда хочется плеваться.
« Last Edit: September 20, 2021, 10:45:33 pm by Mr. George »

Arioch

  • Sr. Member
  • ****
  • Posts: 421
Re: Кирилические имена функций
« Reply #7 on: September 08, 2022, 05:17:48 pm »
Я пробовал в Delphi XE2 такие имена функций...

Поиск текста - не работает (точнее, криво работает. Не понимает, что Б и б - одна буква.  Не помню, работал ли поиск "слова целиком", ли кириллица считалась разделителем слов).
Разные там сообщения (типа того же результата поиска или сообщения об ошибке компиляции) - часто кракозябры лезли.
Переключать клавиатуру туда-сюда при кодинге - тоже конкретно достало.

В общем, я когда-то очень этого хотел, но когда это сделали...   я это попробовал ровно один раз, и never gain.

Впрочем, COM-интерфейс возможно был бы действительно разумным применением. Но, опять же, а поему бы не сделать это параметром, как в JSON SuperObject ? Сделать библиотеку типа

Code: Pascal  [Select][+][-]
  1. Connection:=CreateOleObject('V83.ComConnector');
  2. c := Connection.Connect('File="E:\test"; usr=""; pwd=""');
  3. version1 :=COM[c, 'ОбщийМодуль.ПолучитьВерсию']();
  4. version2 :=COM['V83.ComConnector.ОбщийМодуль.ПолучитьВерсию']();
  5.  

Вы же не требуете разворачивать параметры по типу c := Connection.Connect(File='E:\test', usr='', pwd='');

Да и подсказки по коду не будет (или уже будет?), набираете вы version:=c.ОбщийМодуль., нажимаете Ctrl+Space - и что, появится список методов разве?

А если вы отлаживаете портянку на каком-нибудь VBA, а потом копируете в Delphi - то добавить вызовы обёртки не сложно, хотя и нудно.

P.S. еще вариант я бы посмотрел - это добавить  в програму какой-нибудь скрипт. Не нравится Windows Scripting Host - так есть штуки типа PascalScript и JediVCL Interpreter, возможно  к ним было бы не сложно такой вызов COM прикрутить

 

TinyPortal © 2005-2018