Напишем простейшую компоненту, возвращающую "случайное" число в заданном диапазоне.
Итак, 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);
Сообщить(Всп);
КонецПроцедуры