Пошаговое создание внешней компоненты для 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С Предприятия показан далее:

 

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

 

 

 

47 Comments

  1. Ivon

    Хорошая статья, вот только если бы кто подобную для С# написал…

    Reply
  2. filinmd

    А с VB такой маневр прокатит?

    Reply
  3. Dethmond

    Спасибо за труд, интересно было почитать

    Reply
  4. cool.vlad4

    Кто интересуется COM/ActiveX компонентами на C++/CLI, VB.Net, C# советую посмотреть http://1code.codeplex.com/ . Парочку примеров там точно были.

    Reply
  5. SiAl

    Но это же COM-объект. А где внешняя компонента, заявленная в заголовке публикации?

    Reply
  6. q_i

    (5) SiAl, согласен. Заголовок некорректный.

    Reply
  7. Patricul

    Классная статья ничего не скажешь! Думаю, что тут нет особой разницы на чём делать внешнюю компоненту на С++, C# или тем более на VB… dll он и в Африке dll. Поскольку это статья описывает технологию применения внешних библиотек (описания, собственных, классов, функций) в 1С.

    Reply
  8. cool.vlad4

    (7) Вообще-то в статье как верно заметили — COM компонента, так вот на каком её языке делать есть разница.Сравнить на C++ и языки на дотнете. Разница огромная. Хотя принцип COM технологии, конечно, один.

    Reply
  9. cool.vlad4

    (1) см. (4). Раздел COM. И поищи в интернете и на rsdn(на codeproject). Тема достаточно хорошо освещена. На ИС тоже попадались статьи.

    Reply
  10. Jackman

    В любом случае, спасибо за проиллюстрированную пошаговую статью.

    Reply
  11. DimaP

    Пора учить VB 🙂

    Reply
  12. fishca

    (1) http://www.rsdn.ru/article/dotnet/cs1c.xml — вот описание на RSDN.ru

    Reply
  13. 1cinfo1

    (12)

    Спасибо за ссылку.

    Автору тоже респект, инструкция в картинках никогда не помешает, особенно для первого знакомства.

    Reply
  14. zinch

    Спасибо большое! Очень интересная тема!

    Reply
  15. mihas1001

    Занятная публикация! Расширяет возможности в значительной мере. Было бы интересно посмотреть пошаговое создание платформы в MS Visual Studio))

    Reply
  16. fishca

    (15) ну если только Сергей Нуралиев сделает пару-тройку скриншотиков и разместит здесь 😀

    Reply
  17. Inerren

    Спасибо за отличную инструкцию! Приму на вооружение!

    Reply
  18. sasha_war87

    Спасибо, получилось!

    Reply
  19. VIP_1392

    Спасибо)

    Reply
  20. xazrad

    Ценная статья!!! СПАСИБО!

    Reply
  21. Armando

    Сделайте кто-нибудь аналогичный пример создания ВК по технологии Native API

    Reply
  22. Kuzja_R

    (1) Ivon, сделал шаблон внешней компоненты на C#.

    Reply
  23. djolejek

    {Форма.Форма.Форма(11)}: Ошибка при вызове конструктора (COMОбъект): Класс не зарегистрирован: Класс не зарегистрирован

    хм.. из за чего может быть?

    Reply
  24. djolejek

    Определил в чем ошибка, зарегистрировал только DLL release, после регистрации dll из папки debug всё заработало.

    Reply
  25. realchel

    Может быть за 2 года появились какие то статьи по созданию на С#?

    Reply
  26. fishca

    (25) realchel, пока нет.

    Reply
  27. androgin

    А у кого нибудь есть описание, как компилировать компоненты NetiveApi для вебклиента?

    Reply
  28. miroha

    Скачал с официального сайта MS Visual Studio 2010 expres , а там нет библиотеки ALT ((( что делать?

    Reply
  29. sandybaev

    хорошая тема. заработала с первого раза.

    fishca Вам бы углубиться и показывать нам более сложные вещи.

    а мы бы подучились 🙂

    Reply
  30. festbot

    Привет.

    Прочитал твой пост про создание ВК, точнее COM. Тут вопрос появился, у меня библиотека созданная таким образом (то есть как ATL), не хочет регистрироваться в win XP. В чем может быть проблема? Или есть ли способ создать COM объект как MFC?

    Reply
  31. fish249

    Спасибо, полезная статья.

    Reply
  32. rainstars

    Спасибо. Интересно почитать.

    Reply
  33. wings.inc

    Все работает.

    Reply
  34. olbu

    (28) miroha, Тож столкнулся с тем, что в Экспресс нет atl… Как решили этот вопрос? не подскажите?

    Reply
  35. milk911

    Добрый день! При подключении DLL на другом компьютере возникает ошибка «Тип не определен (AddIn…..». Брал пример ВК с диска ИТС. Когда на компьютер устанавливаешь Visual Studio, все работает. Видимо, не хватает библиотеки какой-то. Как заставить компилятор включать необходимые библиотеки в DLL?

    Спасибо!

    Reply
  36. Perfolenta

    На обычном vb6 такие dll делаются намного проще и отлично работают на любых версиях винды… сам часто делаю и использую..

    Reply
  37. ImHunter

    (21) Насчет как компилировать компоненты NativeApi

    Это достаточно просто пишется на Delphi. Где-то на просторах есть скелет и какая-то компонента на его основе.

    В 2012 г писал таким образом native-компоненту для отрисовки ШК PDF417.

    Reply
  38. sergey.s.betke@yandex.ru

    Коллеги, добрый день.

    Возник вопрос создания кроссплатформенной ВК для 1С 8.3. Речь об OpenOffice, взаимодействие через UNO, а не через COM. Существует компилируемый под Linux шаблон ВК?

    Reply
  39. realchel

    (38)Копай в сторону nativeapi

    Reply
  40. sergey.s.betke@yandex.ru

    (39) Спасибо. Я правильно понимаю, что ВК на NativeAPI будет работать в Linux и без Wine?

    Reply
  41. sergey.s.betke@yandex.ru

    (40)Вопрос снимаю, уже прочитал. Спасибо за ссылку.

    Reply
  42. realchel

    (41)Если сделаешь рабочий шаблон на любом языке, я бы(да и не только я) с удовольствием ознакомились:)

    Reply
  43. ambako1

    очень помог спасибо автору

    Reply
  44. le_

    А кто-нибудь сталкивался с проблемой как на картинках? Что-то с кодировкой…

    Как победить?

    8.2.19.106

    Reply
  45. le_

    (44) Так нормально:

    MessageBox(NULL, CString(*SomeText), L»Заголовок», MB_ICONINFORMATION);

    Reply
  46. чикаго

    (28) (34) необходимо доустановить компонент.

    Workloads -> «Desktop development with C++»

    Reply
  47. vitkhv

    Хорошая статья, жаль только с Visual Studio 2017 15.6 MS грохнули ATL Add Method wizard. В текущей версии Visual Studio 2017 15.9 проблему так и не решили. Видимо MS решила полностью забить на COM.

    Reply

Leave a Comment

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