gifts2017

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

Опубликовал Сергей Рудаков (fishca) в раздел Программирование - Внешние компоненты

В результате получится не совсем "настоящая" внешняя компонента для 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
84
.rar 21,54Kb 84 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Ivon (Ivon) 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) 04.02.12 00:20
Кто интересуется COM/ActiveX компонентами на C++/CLI, VB.Net, C# советую посмотреть http://1code.codeplex.com/ . Парочку примеров там точно были.
5. Алексей Ситников (SiAl) 04.02.12 00:38
Но это же COM-объект. А где внешняя компонента, заявленная в заголовке публикации?
6. q_i 04.02.12 10:21
(5) SiAl, согласен. Заголовок некорректный.
7. Пётр Шнепелев (Patricul) 04.02.12 21:56
Классная статья ничего не скажешь! Думаю, что тут нет особой разницы на чём делать внешнюю компоненту на С++, C# или тем более на VB... dll он и в Африке dll. Поскольку это статья описывает технологию применения внешних библиотек (описания, собственных, классов, функций) в 1С.
8. Ийон Тихий (cool.vlad4) 04.02.12 22:05
(7) Вообще-то в статье как верно заметили - COM компонента, так вот на каком её языке делать есть разница.Сравнить на C++ и языки на дотнете. Разница огромная. Хотя принцип COM технологии, конечно, один.
9. Ийон Тихий (cool.vlad4) 04.02.12 22:07
(1) см. (4). Раздел COM. И поищи в интернете и на rsdn(на codeproject). Тема достаточно хорошо освещена. На ИС тоже попадались статьи.
10. Андрей Иванов (Jackman) 05.02.12 17:29
В любом случае, спасибо за проиллюстрированную пошаговую статью.
11. Дмитрий Павлик (DimaP) 06.02.12 09:36
12. Сергей Рудаков (fishca) 06.02.12 12:02
13. Sidor Petrov (1cinfo1) 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) 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) 09.02.12 11:34
Ценная статья!!! СПАСИБО!
21. Armando Armando (Armando) 26.02.12 14:00
Сделайте кто-нибудь аналогичный пример создания ВК по технологии Native API
Oleg_nsk; vpaull; +2 Ответить 1
22. Ростислав Кузьмин (Kuzja_R) 27.06.12 00:08
23. Иван Сафронов (djolejek) 11.08.12 20:12
{Форма.Форма.Форма(11)}: Ошибка при вызове конструктора (COMОбъект): Класс не зарегистрирован: Класс не зарегистрирован


хм.. из за чего может быть?
24. Иван Сафронов (djolejek) 11.08.12 20:23
Определил в чем ошибка, зарегистрировал только DLL release, после регистрации dll из папки debug всё заработало.
25. Алексей Главизнин (realchel) 31.07.14 12:50
Может быть за 2 года появились какие то статьи по созданию на С#?
26. Сергей Рудаков (fishca) 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) 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) 02.12.16 13:27
На обычном vb6 такие dll делаются намного проще и отлично работают на любых версиях винды... сам часто делаю и использую..
37. ImHunter 02.12.16 13:35
(21) Насчет как компилировать компоненты NativeApi
Это достаточно просто пишется на Delphi. Где-то на просторах есть скелет и какая-то компонента на его основе.
В 2012 г писал таким образом native-компоненту для отрисовки ШК PDF417.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа