В свое время потребовалось организовать чтение бинарного файла из 1с. Подходящего COM объекта я тогда не нашел и решил написать свою внешнюю компоненту. Почитав ИТС и интернет, я не смог найти работающего исходника на С++ Builder, пришлось воспользоваться методом проб и ошибок и сделать свой шаблон компоненты. Реализован интерфейс ILanguageExtender, можно из встроенного языка устанавливать свойства компоненты и вызывать ее методы. Также я попробовал реализовать "вшитые" в dll функции, как это делают в коробочных решениях. При необходимости можно добавить код проверки наличия аппаратного ключа или привязать проверку к определенному серийному номеру винчестера ПК и, таким образом, выполнять или не выполнять дальнейший код "вшитой" в компоненту функции.
Скачать файл
ВНИМАНИЕ:
Файлы из Базы знаний - это исходный код разработки.
Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы.
Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных.
Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Проверить работу вшитой функции можно на любой конфигурации, в которой есть справочник "Номенклатура" (выполняется запрос с текстом ВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&ВыбГруппа)).
В публикации 2 варианта шаблона внешней компоненты - со страницей свойств и без нее. В последнем случае размер dll файла получается примерно на 300 кбт меньше.
При компиляции могут выдаваться ошибки
[C++ Error] atlcom.h(1877): E2352 Cannot create instance of abstract class 'CComObject<TAddInImpl>'
[C++ Error] atlcom.h(1877): E2353 Class 'CComObject<TAddInImpl>' is abstract because of '__stdcall ILanguageExtender::CallAsFunc(long,tagVARIANT *,tagSAFEARRAY * *) = 0'
[C++ Error] atlvcl.h(1271): E2451 Undefined symbol 'e'
Так как в библиотеке типов невозможно выбрать OleVariant*, а можно выбрать только VARIANT*, то необходимо каждый раз при появлении такой ошибки в файл проекта Template_Builder_TLB.h вносить вручную изменения в параметры функции CallAsFunc, заменяя VARIANT* на OleVariant* в трех местах этого файла.