При разработке внешних компонент для платформы 1С по технологии Native API часто возникают ситуации, когда корректно написанный код отображается в 1С или отладчике Visual Studio в виде нечитаемых символов («иероглифов»). Особенно остро это проявляется при объявлении массивов имен методов и свойств, таких как:
static wchar_t *g_MethodNamesRu[] = { L"ОткрытьПорт", L"ЗакрытьПорт", L"Тест", L"Команда", L"ПолучитьНомерВерсии"};
Разберем, почему это происходит и как исправить ситуацию, чтобы 1С могла корректно вызывать функции компоненты на русском языке.
Основная причина возникновения «иероглифов» — это несоответствие кодировки, в которой сохранен исходный файл .cpp, и того, как его интерпретирует компилятор Visual Studio. Когда файл содержит кириллические символы, но сохранен в кодировке, не соответствующей системным настройкам или ожиданиям среды разработки, происходит искажение данных. В результате 1С получает «битые» строки, из-за чего вызовы функций Компонента.ОткрытьПорт() завершаются ошибкой.
Для устранения данной проблемы выполним следующие действия:
.cpp через сторонний продвинутый редактор, например, Notepad++.ANSI. В некоторых случаях, если проект ориентирован на Unicode, может потребоваться пересохранение в формате UTF-8 с BOM. Однако для корректного отображения кириллицы в старых шаблонах Native API именно ANSI часто является ключом к решению.Visual Studio и выполните полную пересборку проекта (Rebuild Solution).Помимо кодировки самого файла, важно проверить настройки проекта в Visual Studio. Убедитесь, что среда разработки корректно работает с юникодом:
Configuration Properties -> General.Character Set. Убедитесь, что установлено значение Use Unicode Character Set. Это позволит системе правильно обрабатывать тип wchar_t, который используется в массивах имен методов и свойств g_MethodNamesRu и g_PropNamesRu.После пересборки компоненты, проверьте её работоспособность в 1С. Если вы все сделали верно, при подключении компоненты к конфигурации методы станут доступны для вызова. Если имена методов все еще отображаются некорректно, попробуйте временно заменить кириллицу на латиницу в массивах имен, чтобы убедиться, что проблема именно в кодировке, а не в логике регистрации методов в интерфейсе IComponentBase.
Помните, что для разработки Native API под Windows стандартом является использование Visual Studio и MSVC, так как примеры и SDK от 1С ориентированы именно на эту среду. Использование C++ Builder возможно, но требует глубоких знаний настроек проекта для обеспечения совместимости с COM-интерфейсами 1С.
Если же вы планируете расширять разработку на мобильные платформы (например, Android), помните, что там подход кардинально меняется: используется Android Studio с NDK, а отладка осуществляется через __android_log_print и анализ логов в консоли adb logcat.