Шаблон внешней компоненты для 1с 7.7, 8.1 на С++ Builder 6.


В свое время потребовалось организовать чтение бинарного файла из 1с. Подходящего COM объекта я тогда не нашел и решил написать свою внешнюю компоненту. Почитав ИТС и интернет, я не смог найти работающего исходника на С++ Builder, пришлось воспользоваться методом проб и ошибок и сделать свой шаблон компоненты. Реализован интерфейс ILanguageExtender, можно из встроенного языка устанавливать свойства компоненты и вызывать ее методы. Также я попробовал реализовать "вшитые" в dll функции, как это делают в коробочных решениях. При необходимости можно добавить код проверки наличия аппаратного ключа или привязать проверку к определенному серийному номеру винчестера ПК и, таким образом, выполнять или не выполнять дальнейший код "вшитой" в компоненту функции.

Проверить работу вшитой функции можно на любой конфигурации, в которой есть справочник «Номенклатура» (выполняется запрос с текстом ВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&ВыбГруппа)).

В публикации 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* в трех местах этого файла.

2 Comments

  1. Cooler

    (1)

    Что-то не так делаю

    Не обязательно, ваши собраться по несчастью: http://forum.infostart.ru/forum17/topic116571/

    Reply
  2. O-Planet

    Что-то не так делаю (( Говорит: «Загрузка началась», но ничего не происходит. Но шаблон очень нужный!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *