Сразу оговорюсь, в итоге получится обыкновенный inprocess server, а не "внешняя компонента" в понимании 1С. В этом примере не используется "Технология создания внешних компонент" от 1С (где-то она у меня на старом винте заблудилась - найти не могу), и поэтому описанная ниже технология подходит для задач типа "вы спрашиваете - мы отвечаем".
Вот и всё!
Итак, 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
//******************************************* Процедура Сформировать() В=СоздатьОбъект("example.Random"); // Random возвращает значение от 0 до 1000 в данном случае Всп=В.GetRandomValue(1000); Сообщить(Всп); КонецПроцедуры
Давайте писать компактные программы!