Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Поведение 1С и OneScript значительно отличаются при работе с Native API компонентой #1359

Open
Sebekerga opened this issue Oct 2, 2023 · 2 comments

Comments

@Sebekerga
Copy link

Sebekerga commented Oct 2, 2023

Опишите ошибку
Хочу использовать OneScript как инструмент интеграционного тестирования библиотеки для Native API. Однако при первых попытках видно различие в работе 1С и OneSscript.

Пример фрагмента кода, где ПутьКомпоненты - путь к собранному .dll x64:

Если НЕ ПодключитьВнешнююКомпоненту(ПутьКомпоненты, "Test", ТипВнешнейКомпоненты.Native) Тогда
    ВызватьИсключение("Не удалось подключить");
Иначе
	Сообщить("Компонента успешно подключена");
КонецЕсли;
ИмяКомпоненты = "AddIn.Test.TestAddIn";
ОбъектКомпоненты = Новый(ИмяКомпоненты);

ВходнаяПеременная = "var";
ВыходнаяПеременная = "";
Результат = ОбъектКомпоненты.ПреобразоватьСтроку(ВходнаяПеременная, ВыходнаяПеременная);
Сообщить(СтрШаблон("для ""%1"" %2 результат: ""%3"" (Тип %4)", ВходнаяПеременная, ?(Результат, "успешный", "ошибочный"), ВыходнаяПеременная, ТипЗнч(ВыходнаяПеременная)));

ВходнаяПеременная = 1;
ВыходнаяПеременная = 0;
Результат = ОбъектКомпоненты.ПреобразоватьЦелое(ВходнаяПеременная, ВыходнаяПеременная);
Сообщить(СтрШаблон("для ""%1"" %2 результат: ""%3"" (Тип %4)", ВходнаяПеременная, ?(Результат, "успешный", "ошибочный"), ВыходнаяПеременная, ТипЗнч(ВыходнаяПеременная)));

ВходнаяПеременная = 1.1;
ВыходнаяПеременная = 0;
Результат = ОбъектКомпоненты.ПреобразоватьВещественное(ВходнаяПеременная, ВыходнаяПеременная);
Сообщить(СтрШаблон("для ""%1"" %2 результат: ""%3"" (Тип %4)", ВходнаяПеременная, ?(Результат, "успешный", "ошибочный"), ВыходнаяПеременная, ТипЗнч(ВыходнаяПеременная)));

ВходнаяПеременная = Истина;
ВыходнаяПеременная = Истина;
Результат = ОбъектКомпоненты.ПреобразоватьБулево(ВходнаяПеременная, ВыходнаяПеременная);
Сообщить(СтрШаблон("для ""%1"" %2 результат: ""%3"" (Тип %4)", ВходнаяПеременная, ?(Результат, "успешный", "ошибочный"), ВыходнаяПеременная, ТипЗнч(ВыходнаяПеременная)));

Данный код работает в 1С, выдавая следующее:

Компонента успешно подключена
для "var" успешный результат: "Hello, "var"!" (Тип Строка)
для "1" успешный результат: "2" (Тип Число)
для "1.1" успешный результат: "2.2" (Тип Число)
для "Да" успешный результат: "Нет" (Тип Булево)

OneScript выдает ошибку:

Конструктор не найден (AddIn.Test.TestAddIn)

Причину ошибки смог выяснить:
Компонента в функции GetClassObject не использует непосредственные наименования классов, а сокращенные алиасы, н.п. 1, 2 и т.д. Поняв это, я смог обойти ошибку, заменив код инициализации компоненты на следющий:

ИмяКомпоненты = "AddIn.Test.1";
ОбъектКомпоненты = Новый(ИмяКомпоненты);

После чего код запускается, однако результат не соответствует ожидаемому:

Компонента успешно подключена
для "var" успешный результат: "" (Тип Строка)
для "1" успешный результат: "0" (Тип Число)
для "1.1" успешный результат: "0" (Тип Число)
для "True" успешный результат: "True" (Тип Булево)

Также, используя редактор OneScript, при втором запуске (нажатием кнопке "Выполнить") приложение крашится.

Воспроизведение ошибки
Особых шагов не требуется.

Ожидаемое поведение
Ожидаю поведения, совпадающего с 1С платформой.

Окружение

  • ОС: Windows 11 Pro 22H2 22621.2215
  • Версия OneScript: 1.8.4.5
  • Версия Платформы 1С: 8.3.19.1467

Дополнительная информация
Хочу обратить внимание, что компонента использует "out параметры", т.е. работает с указателями, падающими от Платформы 1С, используя предоставляемый менеджер памяти - аллоцирует память под возвращаемую переменную, меняет указатели и деаллоцирует старую память. Однако для переенных типа число не требуется манипуляций с указателями - значение можно поменять "на месте", но даже в таком случае редактор падает.

На платформе 1С не наблюдалось нестабильной работы с такими параметрами.

@EvilBeaver
Copy link
Owner

@lintest сможешь посмотреть, пожалуйста?

@lintest
Copy link
Contributor

lintest commented Oct 8, 2023

@EvilBeaver, @Sebekerga
Хорошо, посмотрю

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants