Пошаговое создание внешней компоненты для 1С:Предприятия за 10 минут (на MS Visual Studio 2010)

Программирование - Внешние компоненты

В результате получится не совсем "настоящая" внешняя компонента для 1С Предприятия, т.к. это будет обыкновенный inprocess server реализованный с помощью мастера Visual Studio 2010 и представляющий собой пример реализации в картинках и по шагам. За основу взята публикация http://infostart.ru/public/16916/, за что автору отдельное спасибо.

1. Создаем простейшую компоненту, которая возвращает случайное число.

1) Создаем новый проект в студии: 

2) Выбираем тип проекта ATL Project:

3) Начальное окно мастера:

4) Жмем Next >

Выбираем тип приложения: Dynamic-link library (DLL) и жмем кнопку Finish. Студия создаст заготовку нашего проекта со всеми необходимыми нам файлами.

 

5) В окне ClassView

 

Добавляем наш объект который будет предоставлять реализуемую функциональность компоненты...

Добавляем ATL Simple Object

Указываем в появившемся мастере необходимые параметры:

Для того чтобы можно было обратиться к вашей DLL из вне, например из 1С Предприятие, необходимо обязательно указать ProgID.

...но это еще не все. Так как мы добавили только лишь интерфейс нашей компоненты, на данном шаге, теперь необходимо указать экспортируемый метод как показано на следущем рисунке.

В мастере указываем необходимые параметры:

т.к. у нас есть как входной параметр, так и выходной указываем их с помощью мастера поочередно.

Входной параметр может быть как указателем на тип, так и обычным типом, выходной же только указатель.

Жмем кнопку Next > и переходим на следующую страницу:

На которой могут быть указаны дополнительные  параметры нашего метода. Жмем кнопку Finish.

В результате получаем заготовку метода и прописываем туда свой код

Все компонента готова!

После компиляции в Debug конфигурации получаем

в Release:

Если хочется отлаживать вашу компоненту, то необходимо использовать Debug версию компоненты.

Для отладки идем в меню Tools -> Attach to process...

в появившемся окне выбираем приложение 1С Предприятие в которой наша DLL будет использоваться, после подключения отладчика можно работать с компонентой в отладочном режиме...

Для того чтобы компонента стала доступной другим приложениям необходимо с правами администратора запустить regsvr32 randomdll.dll

Компонента 32-битная, соответственно на 64-х битной системе не взлетит, необходима перекомпиляция проекта.

Пример использования из 1С Предприятия показан далее:

 

Надеюсь кому-то данная публикация поможет войти в мир разработки внешних компонент.

 

 

 

Скачать файлы

Наименование Файл Версия Размер
Исходный код компоненты
.rar 21,54Kb
06.02.12
88
.rar 21,54Kb 88 Скачать

См. также

Комментарии
1. Ivan Kuznietsov (Ivon) 612 03.02.12 19:58 Сейчас в теме
Хорошая статья, вот только если бы кто подобную для С# написал...
2. 3760239 (filinmd) 03.02.12 22:20 Сейчас в теме
А с VB такой маневр прокатит?
3. StronG-X (Dethmond) 04.02.12 00:08 Сейчас в теме
Спасибо за труд, интересно было почитать
4. Ийон Тихий (cool.vlad4) 41 04.02.12 00:20 Сейчас в теме
Кто интересуется COM/ActiveX компонентами на C++/CLI, VB.Net, C# советую посмотреть http://1code.codeplex.com/ . Парочку примеров там точно были.
5. Алексей Ситников (SiAl) 71 04.02.12 00:38 Сейчас в теме
Но это же COM-объект. А где внешняя компонента, заявленная в заголовке публикации?
6. q_i 321 04.02.12 10:21 Сейчас в теме
(5) SiAl, согласен. Заголовок некорректный.
7. Пётр Шнепелев (Patricul) 04.02.12 21:56 Сейчас в теме
Классная статья ничего не скажешь! Думаю, что тут нет особой разницы на чём делать внешнюю компоненту на С++, C# или тем более на VB... dll он и в Африке dll. Поскольку это статья описывает технологию применения внешних библиотек (описания, собственных, классов, функций) в 1С.
8. Ийон Тихий (cool.vlad4) 41 04.02.12 22:05 Сейчас в теме
(7) Вообще-то в статье как верно заметили - COM компонента, так вот на каком её языке делать есть разница.Сравнить на C++ и языки на дотнете. Разница огромная. Хотя принцип COM технологии, конечно, один.
9. Ийон Тихий (cool.vlad4) 41 04.02.12 22:07 Сейчас в теме
(1) см. (4). Раздел COM. И поищи в интернете и на rsdn(на codeproject). Тема достаточно хорошо освещена. На ИС тоже попадались статьи.
10. Андрей Иванов (Jackman) 05.02.12 17:29 Сейчас в теме
В любом случае, спасибо за проиллюстрированную пошаговую статью.
11. Дмитрий Павлик (DimaP) 56 06.02.12 09:36 Сейчас в теме
12. Сергей Рудаков (fishca) 1063 06.02.12 12:02 Сейчас в теме
13. Sidor Petrov (1cinfo1) 7 06.02.12 13:41 Сейчас в теме
(12) fishca,
Спасибо за ссылку.
Автору тоже респект, инструкция в картинках никогда не помешает, особенно для первого знакомства.
14. Дмитрий Зинкевич (zinch) 06.02.12 18:50 Сейчас в теме
Спасибо большое! Очень интересная тема!
15. Михаил Кишенков (mihas1001) 07.02.12 10:03 Сейчас в теме
Занятная публикация! Расширяет возможности в значительной мере. Было бы интересно посмотреть пошаговое создание платформы в MS Visual Studio))
16. Сергей Рудаков (fishca) 1063 07.02.12 11:16 Сейчас в теме
(15) ну если только Сергей Нуралиев сделает пару-тройку скриншотиков и разместит здесь :D
17. Sergey Ivanov (Inerren) 08.02.12 14:41 Сейчас в теме
Спасибо за отличную инструкцию! Приму на вооружение!
18. Александр Пачковский (sasha_war87) 08.02.12 14:47 Сейчас в теме
19. Anna Kustova (VIP_1392) 09.02.12 11:33 Сейчас в теме
20. xazrad (xazrad) 14 09.02.12 11:34 Сейчас в теме
Ценная статья!!! СПАСИБО!
21. Armando Armando (Armando) 1381 26.02.12 14:00 Сейчас в теме
Сделайте кто-нибудь аналогичный пример создания ВК по технологии Native API
Oleg_nsk; vpaull; +2 Ответить 1
22. Ростислав Кузьмин (Kuzja_R) 298 27.06.12 00:08 Сейчас в теме
23. Иван Сафронов (djolejek) 1 11.08.12 20:12 Сейчас в теме
{Форма.Форма.Форма(11)}: Ошибка при вызове конструктора (COMОбъект): Класс не зарегистрирован: Класс не зарегистрирован


хм.. из за чего может быть?
24. Иван Сафронов (djolejek) 1 11.08.12 20:23 Сейчас в теме
Определил в чем ошибка, зарегистрировал только DLL release, после регистрации dll из папки debug всё заработало.
25. Алексей Главизнин (realchel) 6 31.07.14 12:50 Сейчас в теме
Может быть за 2 года появились какие то статьи по созданию на С#?
26. Сергей Рудаков (fishca) 1063 31.07.14 12:58 Сейчас в теме
27. Виктор Назаров (androgin) 21.08.14 03:41 Сейчас в теме
А у кого нибудь есть описание, как компилировать компоненты NetiveApi для вебклиента?
28. miroha Мирошниченко (miroha) 23.08.14 14:31 Сейчас в теме
Скачал с официального сайта MS Visual Studio 2010 expres , а там нет библиотеки ALT ((( что делать?
29. Rauan Sandybaev (sandybaev) 8 04.09.14 10:31 Сейчас в теме
хорошая тема. заработала с первого раза.
fishca Вам бы углубиться и показывать нам более сложные вещи.
а мы бы подучились :)
30. Дмитрий Котёлкин (festbot) 02.10.14 17:48 Сейчас в теме
Привет.
Прочитал твой пост про создание ВК, точнее COM. Тут вопрос появился, у меня библиотека созданная таким образом (то есть как ATL), не хочет регистрироваться в win XP. В чем может быть проблема? Или есть ли способ создать COM объект как MFC?
31. Fish249 (fish249) 30.12.14 14:13 Сейчас в теме
Спасибо, полезная статья.
32. eugin sh (rainstars) 31.12.14 11:06 Сейчас в теме
Спасибо. Интересно почитать.
33. Григорий Трофо (wings.inc) 10.01.15 09:04 Сейчас в теме
34. Олег (olbu) 24.02.15 11:44 Сейчас в теме
(28) miroha, Тож столкнулся с тем, что в Экспресс нет atl... Как решили этот вопрос? не подскажите?
35. Pavlo Silin (milk911) 01.11.16 13:19 Сейчас в теме
Добрый день! При подключении DLL на другом компьютере возникает ошибка "Тип не определен (AddIn.....". Брал пример ВК с диска ИТС. Когда на компьютер устанавливаешь Visual Studio, все работает. Видимо, не хватает библиотеки какой-то. Как заставить компилятор включать необходимые библиотеки в DLL?
Спасибо!
36. Серж Пеленг (Peleng) 18 02.12.16 13:27 Сейчас в теме
На обычном vb6 такие dll делаются намного проще и отлично работают на любых версиях винды... сам часто делаю и использую..
37. Сергей Долинин (ImHunter) 13 02.12.16 13:35 Сейчас в теме
(21) Насчет как компилировать компоненты NativeApi
Это достаточно просто пишется на Delphi. Где-то на просторах есть скелет и какая-то компонента на его основе.
В 2012 г писал таким образом native-компоненту для отрисовки ШК PDF417.
Оставьте свое сообщение