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С Предприятия показан далее:
Надеюсь кому-то данная публикация поможет войти в мир разработки внешних компонент.
Хорошая статья, вот только если бы кто подобную для С# написал…
А с VB такой маневр прокатит?
Спасибо за труд, интересно было почитать
Кто интересуется COM/ActiveX компонентами на C++/CLI, VB.Net, C# советую посмотретьhttp://1code.codeplex.com/ . Парочку примеров там точно были.
Но это же COM-объект. А где внешняя компонента, заявленная в заголовке публикации?
(5) SiAl, согласен. Заголовок некорректный.
Классная статья ничего не скажешь! Думаю, что тут нет особой разницы на чём делать внешнюю компоненту на С++, C# или тем более на VB… dll он и в Африке dll. Поскольку это статья описывает технологию применения внешних библиотек (описания, собственных, классов, функций) в 1С.
(7) Вообще-то в статье как верно заметили — COM компонента, так вот на каком её языке делать есть разница.Сравнить на C++ и языки на дотнете. Разница огромная. Хотя принцип COM технологии, конечно, один.
(1) см. (4). Раздел COM. И поищи в интернете и на rsdn(на codeproject). Тема достаточно хорошо освещена. На ИС тоже попадались статьи.
В любом случае, спасибо за проиллюстрированную пошаговую статью.
Пора учить VB 🙂
(1)http://www.rsdn.ru/article/dotnet/cs1c.xml — вот описание на RSDN.ru
(12)
Спасибо за ссылку.
Автору тоже респект, инструкция в картинках никогда не помешает, особенно для первого знакомства.
Спасибо большое! Очень интересная тема!
Занятная публикация! Расширяет возможности в значительной мере. Было бы интересно посмотреть пошаговое создание платформы в MS Visual Studio))
(15) ну если только Сергей Нуралиев сделает пару-тройку скриншотиков и разместит здесь 😀
Спасибо за отличную инструкцию! Приму на вооружение!
Спасибо, получилось!
Спасибо)
Ценная статья!!! СПАСИБО!
Сделайте кто-нибудь аналогичный пример создания ВК по технологии Native API
(1) Ivon, сделалшаблон внешней компоненты на C#.
{Форма.Форма.Форма(11)}: Ошибка при вызове конструктора (COMОбъект): Класс не зарегистрирован: Класс не зарегистрирован
хм.. из за чего может быть?
Определил в чем ошибка, зарегистрировал только DLL release, после регистрации dll из папки debug всё заработало.
Может быть за 2 года появились какие то статьи по созданию на С#?
(25) realchel, пока нет.
А у кого нибудь есть описание, как компилировать компоненты NetiveApi для вебклиента?
Скачал с официального сайта MS Visual Studio 2010 expres , а там нет библиотеки ALT ((( что делать?
хорошая тема. заработала с первого раза.
fishca Вам бы углубиться и показывать нам более сложные вещи.
а мы бы подучились 🙂
Привет.
Прочитал твой пост про создание ВК, точнее COM. Тут вопрос появился, у меня библиотека созданная таким образом (то есть как ATL), не хочет регистрироваться в win XP. В чем может быть проблема? Или есть ли способ создать COM объект как MFC?
Спасибо, полезная статья.
Спасибо. Интересно почитать.
Все работает.
(28) miroha, Тож столкнулся с тем, что в Экспресс нет atl… Как решили этот вопрос? не подскажите?
Добрый день! При подключении DLL на другом компьютере возникает ошибка «Тип не определен (AddIn…..». Брал пример ВК с диска ИТС. Когда на компьютер устанавливаешь Visual Studio, все работает. Видимо, не хватает библиотеки какой-то. Как заставить компилятор включать необходимые библиотеки в DLL?
Спасибо!
На обычном vb6 такие dll делаются намного проще и отлично работают на любых версиях винды… сам часто делаю и использую..
(21) Насчет как компилировать компоненты NativeApi
Это достаточно просто пишется на Delphi. Где-то на просторах есть скелет и какая-то компонента на его основе.
В 2012 г писал таким образом native-компоненту для отрисовки ШК PDF417.
Коллеги, добрый день.
Возник вопрос создания кроссплатформенной ВК для 1С 8.3. Речь об OpenOffice, взаимодействие через UNO, а не через COM. Существует компилируемый под Linux шаблон ВК?
(38)Копай в сторонуnativeapi
(39) Спасибо. Я правильно понимаю, что ВК на NativeAPI будет работать в Linux и без Wine?
(40)Вопрос снимаю, уже прочитал. Спасибо за ссылку.
(41)Если сделаешь рабочий шаблон на любом языке, я бы(да и не только я) с удовольствием ознакомились:)
очень помог спасибо автору
А кто-нибудь сталкивался с проблемой как на картинках? Что-то с кодировкой…
Как победить?
8.2.19.106
(44) Так нормально:
MessageBox(NULL, CString(*SomeText), L»Заголовок», MB_ICONINFORMATION);
(28) (34) необходимо доустановить компонент.
Workloads -> «Desktop development with C++»
Хорошая статья, жаль только сVisual Studio 2017 15.6 MS грохнули ATL Add Method wizard . В текущей версии Visual Studio 2017 15.9 проблему так и не решили. Видимо MS решила полностью забить на COM.