Создаем по шагам КОМПАКТНУЮ внешнюю компоненту для 1С:Предприятия за 10 минут (на MS Visual C++ 6.0)

18.10.06

Разработка - Разработка внешних компонент

Сразу оговорюсь, в итоге получится обыкновенный inprocess server, а не "внешняя компонента" в понимании 1С. В этом примере не используется "Технология создания внешних компонент" от 1С (где-то она у меня на старом винте заблудилась - найти не могу), и поэтому описанная ниже технология подходит для задач типа "вы спрашиваете - мы отвечаем".

Напишем простейшую компоненту, возвращающую "случайное" число в заданном диапазоне.
 
 
А теперь уменьшим размер dll-ки в несколько раз настройками компилятора...

Итак, Project -> Settings.

1. Закладка С/С++
Category: General
Optimizations: Minimize size
Debug info: None
Preprocessor definitions: WIN32,_WINDOWS,_MBCS,_USRDLL - т.е. убрали _DEBUG

Category: Code generation
Use run-time library: Multithreated DLL

Category: Optimizations
Optimizations: Minimize size

2. Закладка Link
Category: General
Убираем галку с Generate debug info
Убираем галку с Link incrementally

3. Закладка Resources
Убрать из Preprocessor definitions - _DEBUG

Если теперь скомпилить вылезет ошибка: что-то вроде опции /O1 и /GZ не могут жить вместе. Ну не могут и не надо. Идем на закладку С/С++ и в Project Options ручками удаляем опцию /GZ.

Если после этого скомпилить проект его размер составит ~ 28 килобайт. Уже неплохо. А теперь добавим две "волшебные" ;-) строчки в наш проект.

Они также есть на последнем рисунке:

#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text")

Означают эти строчки следующее: задать секциям PE файла выравнивание 512 байт (а не 4096 по умолчанию) и объединить секции .rdata & .text

Внимание! Выравнивание менее 512 байт делать не стоит, т.к. такая программа не пойдет под Windows NT/2000/XP.

Итак, компилим, получаем dll-ку размером 12800 байт. Занавес.

Ах, да! Совсем забыл, для чего всё это затевалось! Теперь эту dll-ку можно использовать как внешнюю компоненту 1С:Предприятия, предварительно зарегистрировав на компьютере при помощи команды: regsvr32 example.dll
А вот код внешней обработки, использующей эту dll-ку:

//******************************************* 
Процедура Сформировать() 
В=СоздатьОбъект("example.Random");
// Random возвращает значение от 0 до 1000 в данном случае 
Всп=В.GetRandomValue(1000);
Сообщить(Всп);
КонецПроцедуры 
Пример внешней компоненты
Автор статьи: yu

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Программист Пользователь 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать Android-планшеты, смарт-телевизоры с Android, мониторы или проекторы под управлением Windows или Linux-компьютера. Linux-версия успешно запускается на одноплатных компьютерах Raspberri Pi и Orange Pi. Настраивается ЛЮБОЙ ДИЗАЙН экрана при помощи встроенного графического редактора! Решение можно масштабировать от одного экрана до тысяч экранов с централизованным управлением.

18300 руб.

30.05.2017    56937    10    71    

47

Разработка внешних компонент Программист 1С:Предприятие 8 1C:Бухгалтерия Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

5084 руб.

17.09.2018    41118    118    128    

120

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    6677    bayselonarrend    17    

54

Разработка внешних компонент Программист 1С:Предприятие 8 Россия Бесплатно (free)

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    11579    kovalevdmv    29    

83

Разработка внешних компонент Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.

26.01.2024    11903    starik-2005    40    

49

Инструментарий разработчика Разработка внешних компонент Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пример взаимодействия 1С с Apach Kafka посредством внешней компоненты, разработанной на основе официальной библиотеки librdkafka (the Apache Kafka C/C++ client library).

22.11.2023    8375    144    ivan1703    26    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. O-Planet 6426 18.10.06 03:06 Сейчас в теме
Хм... Вот бы на дельфях. Но скачал, попробую...
2. yu 328 18.10.06 10:41 Сейчас в теме
Я бы не сказал что автор неизвестен ;-)
Это моя крошечная статейка середины 2002 года
3. support 4484 18.10.06 10:57 Сейчас в теме
Вот, как здорово! А у нас только ящик был my1c@mailru.com, но он уже не существует. Представьтесь, мы подправим автора и ссылку дадим на Ваш сайт.
4. yu 328 18.10.06 11:03 Сейчас в теме
Да, был такой ящик раньше. Собственно, зачем представляться-то, у меня здесь профайл уже есть.
5. 19.10.06 21:07 Сейчас в теме
Но это же не внешняя компонента. Зачем в заголовке неправду писать?
6. German 415 11.12.06 16:21 Сейчас в теме
Да...у меня и на VS2005 этот фокус удался
7. vasilykushnir 63 11.12.06 17:26 Сейчас в теме
Поддерживаю O-Planet - на Дельфях бы...
8. vasilykushnir 63 12.12.06 08:50 Сейчас в теме
Хотя... Появится время, попробую на 7-е делфи перевести пример.
9. sttt 116 31.01.07 09:57 Сейчас в теме
вот бы на с++ builder'e
10. German 415 05.03.07 14:13 Сейчас в теме
http://ifolder.ru/1282415
Проект на VC2005 и пример обработки 1c8.0
11. support 4484 06.03.07 08:37 Сейчас в теме
German, с тебя статья :)
12. karat60 01.10.07 13:21 Сейчас в теме
13. boy13 169 28.05.09 18:55 Сейчас в теме
German +1 !!! Мне помогло. :)
Для отправки сообщения требуется регистрация/авторизация