(495)
105 99 23



оплата и доставка

оплата и доставка char.ru



Книги интернет магазинКниги
Рефераты Скачать бесплатноРефераты



Осознанность, где взять счастье

РЕФЕРАТЫ РЕФЕРАТЫ

Разлел: Менеджмент (Теория управления и организации) Разлел: Менеджмент (Теория управления и организации)

Разработка DLL в Borland Delphi

найти еще ...
Delphi 2005 для .NET В подлиннике БХВ-Петербург Марков Е.П.
Для подготовленных программистов.
323 руб
Анкетирование: разработка опросных листов, их роль и значение при проведении рыночных исследований Баланс-Клуб Брейс А.
688 руб

В нашем примере мы имеем дело с динамической библиотекой, содержащей единственную процедуру: HelloWorld. Причем обратите внимание, что данная процедура по структуре ничем не отличается от тех, которые вы помещаете в модули своих приложений. Ключевое слово expor s сигнализирует компилятору о том, что перечисленные ниже функции и/или процедуры должны быть доступны из вызывающих приложений (т.е. они как бы «экспортируются» из библиотеки). Подробнее о механизме экспорта мы поговорим чуть позже. И, наконец, в конце модуля можно увидеть ключевые слова begi и e d. Внутри данного блока вы можете поместить код, который должен выполняться в процессе загрузки библиотеки. Достаточно часто этот блок остается пустым. Как уже говорилось выше, все процедуры и функции, помещаемые в DLL , могут быть разделены на две группы: экспортируемые (вызываемые из других приложений) и локальные. Естественно, внутри библиотеки также могут быть описаны классы, которые в свою очередь содержат методы, но в рамках данной статьи я не буду на этом останавливаться. Описание и реализация процедур и функций, вызываемых в пределах текущей DLL , ничем не отличаются от их аналогов в обычных проектах-приложениях. Их специфика заключается лишь в том, что вызывающая программа не будет иметь к ним доступа. Она просто не будет ничего знать об их существования, так же, как одни классы ничего не знают о тех методах, которые описаны в секции priva e других классов. В дополнение к процедурам и функциям, DLL может содержать глобальные данные, доступ к которым разрешен для всех процедур и функций в библиотеке. Для 16-битных приложений эти данные существовали в единственном экземпляре независимо от количества загруженных в оперативную память программ, которые используют текущую библиотеку. Другими словами, если одна программа изменяет значение глобальной переменной a на 100, то для всех остальных приложений a будет значение 100. Для 32-битных приложений это не так. Теперь для каждого приложения создается отдельная копия глобальной области данных. Экспорт функций из DLL Как уже говорилось выше, для экспорта процедур и функций из DLL , необходимо использовать ключевое слово expor . Еще раз обратите внимание на представленный выше листинг библиотеки MiFirs Dll. Поскольку процедура HelloWorld определена как экспортируемая, то она может быть вызвана на выполнение из других библиотек или приложений. Существуют следующие способы экспорта процедур и функций: экспорт по имени и экспорт по порядковому номеру. Наиболее распространенный способ экспорта - по имени. Взглянем на приведенный ниже текст: expor s SayHello, DoSome hi g, DoSome hi gReallyCool; Следует обратить внимание на то, что Delphi автоматически назначает порядковый номер каждой экспортируемой функции (процедуре) независимо от того, определяете вы его явно или нет. Явное определение индекса позволяет вам лично управлять порядковым номером экспортируемой функции или процедуры. Для того, чтобы определить выполняется ли ваш кодек в DLL или в вызывающем приложении, можно воспользоваться глобальной переменной IsLibrary. Она принимает значение ИСТИНА в том случае, если код вызывается из библиотеки и ЛОЖЬ в случае выполнения процедуры или функции из вызывающего приложения.

Прошу заметить, что при экспорте функции также было использовано ключевое слово s dcall. Следует обратить особое внимание на работу с дочерними формами в DLL. Если, к примеру, в вызывающем приложении главная форма имеет значение свойства FormS yle, равным MDIForm, то при попытке вызова из DLL MDIChild-формы, на экране появится сообщение об ошибке, в котором будет говориться, что нет ни одной активной MDI-формы. В тот момент, когда вы пытаетесь показать ваше дочернее окно, VCL проверяет корректность свойства FormS yle главной формы приложения. Однако в нашем случае все вроде бы верно. Так в чем же дело? Проблема в том, что при проведении такой проверки, рассматривается объект Applica io , принадлежащий не вызывающему приложению, а собственно динамической библиотеке. Ну, и естественно, поскольку в DLL нет главной формы, проверка выдает ошибку. Для того чтобы избежать такой ситуации, надо назначить объекту Applica io динамической библиотеки объект Applica io вызывающего приложения. Естественно, это заработает только в том случае, когда вызывающая программа - VCL-приложение. Кроме того, перед выгрузкой библиотеки из памяти необходимо вернуть значение объекта Applica io библиотеки в первоначальное состояние. Это позволит менеджеру памяти очистить оперативную память, занимаемую библиотекой. Следовательно, вам нужно сохранить указатель на «родной» для библиотеки объект Applica io в глобальной переменной, которая может быть использована при восстановлении его значения. Итак, вернемся немного назад и перечислим шаги, необходимые нам для работы с помещенным в DLL MDIChild-формами. В динамической библиотеке создаем глобальную переменную типа Applica io . Сохраняем указатель на объект Applica io DLL в глобальной переменной. Объекту Applica io динамической библиотеки ставим в соответствие указатель на Applica io вызывающего приложения. Создаем MDIChild-форму и работаем с ней. Возвращаем в первоначальное состояние значение объекта Applica io динамической библиотеки и выгружаем DLL из памяти. Первый шаг прост. Просто помещаем следующий код в верхней части модуля DLL: var DllApp : Applica io ; Затем создаем процедуру, которая будет изменять значение объекта Applica io и создавать дочернюю форму. Процедура может выглядеть примерно так: procedure ShowMDIChild(Mai App : Applica io ); var Child : MDIChild; begi if o Assig ed(DllApp) he begi DllApp := Applica io ; Applica io := Mai App; e d; Child := MDIChild.Crea e(Applica io .Mai Form); Child.Show; e d; Все, что нам теперь необходимо сделать, - это предусмотреть возвращение значения объекта Applica io в исходное состояние. Делаем это с помощью процедуры MyDllProc: procedure MyDLLProc(Reaso : I eger); begi if Reaso = DLL PROCESS DE ACH he { DLL is выгружается. Восстанавливаем значение указателя Applica io } if Assig ed(DllApp) he Applica io := DllApp; e d; Вместо заключения. Использование динамически подключаемых библиотек не так сложно, как это может показаться на первый взгляд. DLL предоставляют широчайшие возможности для оптимизации работы приложений, а также работы самих программистов.

Если ваш компьютер работает под управлением операционной системы Wi dows, то вы не можете не знать о существовании динамических подсоединяемых библиотек (dy amic li k libraries - DLL). Достаточно взглянуть на список файлов, расположенных в системном каталоге Wi dows . Порой количество используемых операционной системой динамических библиотек достигает нескольких сотен. Таким образом, мне кажется, не стоит отрицать тот факт, что DLL являются неотъемлемой частью функционирования операционных систем семейства Microsof Wi dows. Однако для вас может быть неочевидна необходимость использования динамических библиотек при разработке приложений. В рамках данной статьи мы поговорим о принципах функционирования DLL и их использования в процессе создания ваших собственных программ. Для начала давайте выясним, что собой представляет динамическая подключаемая библиотека. Итак, DLL - это один или несколько логически законченных фрагментов кода, сохраненных в файле с расширением .dll. Этот код может быть запущен на выполнение в процессе функционирования какой-либо другой программы (такие приложения называются вызывающими по отношению к библиотеке), но сама DLL не является исполняемым файлом. Существует два типа динамических библиотек - исполняемые и библиотеки ресурсов. Однако это не означает, что в одном файле не может находиться и код некоторой функции и какие-либо ресурсы. Просто иногда бывает удобно разнести реализацию исполняемых процедур и используемые приложением ресурсы в разные файлы. Итак, процедуры и функции, содержащиеся в динамической библиотеке, можно разделить на два типа: те, которые могут быть вызваны из других приложений. Рассмотрим следующий пример: Scree .Cursors := LoadCursor(HI s a ce, MYCURSOR'); LoadCursor - функция Wi dows API, которая вызывается приложением из динамической библиотеки User 32.dll. Кстати, примером хранимых в динамической библиотеке ресурсов могут являться такие стандартные диалоги Wi dows , как диалог открытия файла, диалог печати или настройки принтера. Эти диалоги находятся в файле Comc l32.dll. Однако многие прикладные разработчики используют функции вызова форм этих диалогов, совершенно не задумываясь, где хранится их описание. Второй тип процедур - это те, которые используются только внутри самого файла библиотеки. Аргументы в пользу использования DLL Итак, прежде чем перейти к обсуждению структуры динамических библиотек, необходимо поговорить о тех преимуществах, которые предоставляет их использование разработчику. Во-первых, это повторное использование кода. Думаю, нет необходимости пояснять удобство использования один раз разработанных процедур и функций при создании нескольких приложений? Кроме того, в дальнейшем вы сможете продать некоторые из своих библиотек, не раскрывая исходных кодов. А чем тогда это лучше компонентов, спросите вы? А тем, что функции, хранящиеся в библиотеке, могут быть вызваны на выполнение из приложений, разработанных не на Objec Pascal, а, например, с использованием C Builder, Visual Basic, Visual C и т.д. Такой подход накладывает некоторые ограничения на принцип разработки библиотеки, но это возможно.

Поиск Советы по Delphi. Версия 1.4.3 от 1.1.2001

Сеть чуть не захлебнулась от такой работы. Утилизация файлового сервера была до нас около 60%. Не плохо для всего! Я думаю Borland необходимо задокументировать такой подход, чтобы другие не становились хакерами типа нас! :) Эти требования обязательны при разработке многопользовательских приложений Delphi с использованием файлов Dbase или Paradox. – Ted Bulmanski Выполнение запросов к базе данных в фоне Delphi 2 Тема: Выполнение запросов к базе данных в фоновом потоке Данный документ объясняет как выполнить запрос в фоновом режиме, используя класс TThread. Для получения общей информации о классе TThread, пожалуйста обратитесь к документации Borland и электронной справке. Для понимания данного документа вам необходимо иметь представление о том, как работать с компонентами для работы с базами данных, поставляемых в комплекте с Delphi 2.0. Для осуществления потокового запроса необходимо выполнение двух требований. Во-первых, потоковый запрос должен находиться в своей собственной сессии с использованием отдельного компонента TSession

Реферат: Проект вскрытия и разработки россыпного месторождения рч. Вача Проект вскрытия и разработки россыпного месторождения рч. Вача

Министерство общего и профессионального образования ИРКУТСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕ Открытые горные работы наименование кафедры Допускаю к защите зав. кафедрой подпись В. П. Федорко И.О.Фамилия ОС = 1 Для освещения карьера применим трансформатор ТМ-6/0,4 с но­минальной мощностью 25 кВА, номинальным напряжением: входным – 6 кВ, выходным – 0,4 кВ. 4.3 Заземление Расчет заземления с ЕПБ сопротивление в любой точке общего заземлительного устройства на открытых горных работах не должно превышать 4 Ом. Заземлительное устройства состоит из центрального и местного заземляющего устройства. Местное заземляющее устройство делается у ПКТП, а центральное у ГПП барьера. Общее сопротивление заземления определяется: RЗ = RУЗК RМЛ RПЛ RКЛ

Поиск Использование NuMega DriverStudio для написания WDM-драйверов

Но не следует забывать, что наш драйвер — всего-то простейшая демонстрационная программа, которая практически не выполняет никаких полезных действий. Написание реальных драйверов является гораздо более сложной задачей. Если бы драйвер был написан с использованием пакета DDK, то он бы имел практически ту же структуру и почти тот же код (правда, не объектно-ориентированный). Но в таком случае весь драйвер пришлось бы писать вручную, а DriverWizard генерирует скелет драйвера автоматически. Это сильно облегчает процесс разработки драйвера, позволяя программисту не заботиться о написании скелета драйвера и предохраняя его от возможных ошибок. 2.4 Разработка dll-библиотеки для взаимодействия с драйвером dll-библиотека (Dynamic Link Library) — программный модуль, который может быть динамически подключен к выполняющемуся процессу. Dll–библиотека может содержать функции и данные. При подключении dll к процессу она отображается на адресное пространство этого процесса. Если говорить по русски, то это означает: в любой момент времени программа может загрузить dll-библиотеку, получить указатели на функции и данные этой библиотеки

Реферат: База данных "Автосервис" в среде Borland Delphi 6.0. База данных "Автосервис" в среде Borland Delphi 6.0.

Существует один, на первый взгляд, недостаток, который при постоянном использовании БД характеризует себя с положительной стороны: в данной БД информация об автомобилях и владельцах в исходном состоянии является независимой. Связь владельца с автомобилем отслеживается лишь в процессе оформления заказа, после чего успешно хранится в базе. Это допущение создано с целью предотвращения нестандартных ситуаций, возникающих при существовании у владельца нескольких автомобилей и т.п. 2. Описание структуры БД Схема данных Описание таблиц Автомобили (Cars) Код автомобиля CodeAu o Марка авто MAu o A(30) Регистр. знак S a eSig A(11) Тех. паспорт passspor A(10) Цвет авто ColourAu o A(20) Год выпуска Year S Двигатель № Mo or um A(10) Кузов № Body um A(10) Шасси № U derCge um A(10) Примечание I fo M(200) Владельцы (Ow ers) Код владельца CodeOw er Фамилия OLas ame A(30) Имя OFirs ame A(20) Отчество OSeco d ame A(25) Паспорт № OPasspor um A(10) Права № ODrvLice ce A(15) Телефон Pho e A(12) Фото Fo o B Примечание I fo M(200) Виды работ (Ki dOfWork) Код работы CodeWork Вид работы Ki dWork A(30) Стоимость работы Cos Work $ Срок выполнения PeriodEx Гарантия Guara ee Новые запчасти ( ew Par ) Код автозапчасти CodePar Наименование Par ame A(30) Стоимость Cos Par $ Гарантия Guara ee Заказы (AOrders) Номер заказа Order um Код автомобиля CodeAu o I Код владельца CodeOw er I Дата поступления Ac Da e D Примечание I fo M(200) Услуги заказа (OrderWork) Номер заказа Order um I Код работы CodeWork I Установка запчастей (Pu I Par ) Номер заказа Order um I Код автозапчасти CodePar I 3.

Поиск Виртуальная библиотека Delphi

Лежащий в основе Delphi язык — Object Pascal, который является расширением объектно-ориентированного языка Pascal (Turbo/Borland Pascal, начиная с версии 5.5). В Delphi также входят локальный SQL-сервер InterBase 4.0, генераторы отчетов, библиотеки визуальных компонентов, и прочее хозяйство, необходимое для того, чтобы чувствовать себя совершенно уверенным при профессиональной разработке информационных систем или просто программ для Windows-среды. Поскольку в архитектуре клиент-сервер де-факто сложилось такое положение, что клиентские станции работают, как правило, в Windows-среде, а SQL-сервер — в операционной системе UNIX, Delphi Client-Server может служить удобным инструментом для скоростной разработки приложений. 2. Для кого предназначен Delphi? Прежде всего профессиональным разработчикам, желающим очень быстро разрабатывать приложения в архитектуре клиент-сервер. Delphi производит небольшие по размерам (до 15-30 Кбайт в Delphi 3.x!) высокоэффективные исполняемые модули (.exe и .dll), поэтому в Delphi должны быть прежде всего заинтересованы те, кто разрабатывает продукты на продажу

Реферат: Языка программирования Delphi. Разработка практических заданий Языка программирования Delphi. Разработка практических заданий

При выполнении курсовой работы предстоит: изучить теорию и технологию работы со средой программирования Delphi; изучить и проанализировать соответствующую литературу; провести сравнительный анализ языков программирования этого класса, выявить достоинства и недостатки; привести элементы методической работы в виде разработки вариантов заданий (из прикладных областей) для учащихся старших классов школ изучающих Delphi на уроках информатики. Объектно-ориентированные языки программирования пользуются в последнее время большой популярностью среди программистов, так как они позволяют использовать преимущества объектно-ориентированного подхода не только на этапах проектирования и конструирования программных систем, но и на этапах их реализации, тестирования и сопровождения. Первый объектно-ориентированный язык программирования Simula 67 был разработан в конце 60-х годов в Норвегии. Авторы этого языка очень точно угадали перспективы развития программирования: их язык намного опередил свое время. Однако современники (программисты 60-х годов) оказались не готовы воспринять ценности языка Simula 67, и он не выдержал конкуренции с другими языками программирования (прежде всего, с языком For ra ).

Забавная пачка "5000 дублей".
Юмор – настоящее богатство! Купюры в пачке выглядят совсем как настоящие, к тому же и банковской лентой перехвачены... Но вглядитесь
60 руб
Раздел: Прочее
Наклейки для поощрения "Смайлики 2".
Набор для поощрения на самоклеящейся бумаге. Формат 95х160 мм.
19 руб
Раздел: Наклейки для оценивания, поощрения
Брелок LED "Лампочка" классическая.
Брелок работает в двух автоматических режимах и горит в разных цветовых гаммах. Материал: металл, акрил. Для работы нужны 3 батарейки
131 руб
Раздел: Металлические брелоки

Реферат: Объем и характеристики исходной информации для составления проектов разработки нефтяных и газовых месторождений (контрольная) Объем и характеристики исходной информации для составления проектов разработки нефтяных и газовых месторождений (контрольная)

Министерство образования Российской Федерации Тюменский государственный нефтегазовый университетКонтрольная работа по «Геологии нефти и газа» Вариант № 8 Выполнил: Студент: Твардовский Юрий Михайлович Группа: МТЭКс-1 Проверил: г. Тюмень, 2000 годВопрос № 1. Объем и характеристики исходной информации для составления проектов разработки нефтяных и газовых месторождений.На стадии поисков, объектом работ которой являются подготовленные ловушки, проект составляется на бурение одной скважины или группа скважин, имеющих примерно одинаковую глубину и аналогичную конструкцию. Проект содержит разделы, аналогичные приведенным для проекта параметрического бурения. После введения, описания географо-экономических условий работ, геолого-геофизической изученности приводятся данные о геологическом строении площади проектируемых работ, включая работ проектный литолого-стратиграфический разрез, тектонику, нефтегазоносность и гидрогеологическую характеристику разреза. Главным в проекте является раздел «Методика и объем проектируемых работ», в котором обосновывается постановка поисков на подготовленных к глубокому бурению объектах или на залежах ранее открытых месторождений.

Реферат: Разработка базы данных `ДЕКАНАТ` в среде программирования "Delphi" Разработка базы данных `ДЕКАНАТ` в среде программирования "Delphi"

Реферат: Проект участка цеха с детальной разработкой единичного технологического процесса изготовления детали "Картер" Проект участка цеха с детальной разработкой единичного технологического процесса изготовления детали "Картер"

Все эти области производства относятся к технологии машиностроения, охватывающей все этапы процесса изготовления машиностроительной продукции. Однако под "технологией машиностроения" принято понимать научную дисциплину, изучающую преимущественно процессы механической обработки деталей и сборки машин и попутно затрагивающую вопросы выбора заготовок и методы их изготовления. Это объясняется тем, что в машиностроении заданные формы деталей с требуемой точностью и качеством их поверхностей достигаются в основном путем механической обработки, так как другие способы обработки не всегда могут обеспечить выполнение этих технических требований. В процессе механической обработки деталей машин возникает наибольшее число проблемных вопросов, связанных с необходимостью выполнения технических требований, поставленных конструкторами перед производством. Процесс механической обработки связан с эксплуатацией сложного оборудования — металлорежущих станков; трудоемкость и себестоимость механической обработки больше, чем на других этапах процесса изготовления машин.

Реферат: Порядок разработки схемы финансирования инвестиционного проекта Порядок разработки схемы финансирования инвестиционного проекта

Реферат: Разработка проекта предпринимательского бизнеса по производству игрушек на ЗАО Разработка проекта предпринимательского бизнеса по производству игрушек на ЗАО

Организация сбыта продукции Сбыт производится через сеть магазинов, рынков. Продукция продается напрямую торговым организациям и через посредников за наличный расчет и по предоплате, может по договору с покупателем с оплатой после реализации товара или с указанным сроком оплаты. Реклама продукции Для улучшения сбыта необходимо сделать рекламу, так как без рекламы мало кто будет знать, кто производит данный товар. Реклама должна довести до покупателя информацию о фирме, о товаре, об их характеристиках, достоинствах и новинках в производстве. Целью рекламы является : - увеличение спроса на товар, придать ему широкую известность и запоминание; - создание круга постоянных клиентов; - вытеснение конкурентов, с целью захвата рынка. Реклама должна поддерживать и увеличивать известность фирмы. Для рекламы используются различные виды : печать, радио, телевидение, I ER E . Оценка конкурента Конкуренция – соперничество , столкновение различных интересов, постоянная борьба за улучшение условий жизнедеятельности, за выживание.

Реферат: Разработка и обоснование реализации инновационного проекта по оказанию сбытовых услуг ЗАО “Ольвира” Разработка и обоснование реализации инновационного проекта по оказанию сбытовых услуг ЗАО “Ольвира”

ООО “Ольвира” приобретает следующие обязанности: Собственными силами и средствами обеспечить бесперебойный сбыт продукции ЗАО “Диана” по установленным расценкам. Действовать на рынке Балашихинского района под именем “Диана”. Указанный договор вступает в действие с момента его подписания и утрачивает силу по желанию одной из сторон. Подписанию такого договора предшествует проведение работ по доказательству осуществимости проекта. Руководству ЗАО “Диана” необходимо предоставить все необходимые расчеты по технико-экономическим параметрам проекта, а также документы, подтверждающие способность ООО “Ольвира” обеспечить выполнение оговоренных обязанностей. Очень важным правовым аспектом деятельности ООО “Ольвира” является получение налоговых льгот. В частности, источником получения налоговых льгот является тот факт, что фирма “Ольвира”: является малым предприятием; функционирует в отрасли бытовых услуг; ведет реализацию по фиксированным ценам, обозначенным в прейскурантах. Кроме означенного контракта реализация проекта обеспечивается и рядом сопутствующих документов, регламентирующих решение спорных вопросов, а также прочих аспектов совместной деятельности.


Внутренний мир Borland Delphi 2006 (+ CD-ROM) Диалектика / Вильямс Хладни И.
Книга рассчитана на программистов разной квалификации, а также будет полезна для студентов и преподавателей дисциплин, связанных с программированием.
498 руб
Программирование в Borland Delphi 2006 для профессионалов (+ CD-ROM) Диалектика / Вильямс Пашеку Х.
NET, как управление памятью, технологии COM Interop, Reflection, GDI+, применение компонентов Web-форм и форм Windows и многое другое.
649 руб
Разработка приложений в Delphi 2005/2006 (+ CD-ROM) МК-Пресс Шпак Ю.
Здесь они найдут описание интегрированной среды разработки и структуры проекта, а также познакомятся с языком программирования Delphi, библиотекой компонентов VCL, процессом разработки и отладки приложений.
360 руб
CD-ROM. Обучение Borland Delphi 8.0
5 руб
CD-ROM. Borland Delphi 2005
Интерактивные уроки, озвученные профессиональным диктором, возможность непосредственно участвовать в обучающем процессе помогут Вам быстро и в полном объеме овладеть возможностями программы.
5 руб
CD-ROM. Обучение Borland Delphi 2005
Просматривая урок, вы можете перемотать его на любую позицию, остановить и возобновить воспроизведение снова.
5 руб
Borland Delphi CD-ROM. Интерактивный самоучитель.
Также Вы узнаете о том, что нового представлено в программе Delphi 2007.
5 руб
Borland Kylix. Разработка приложений Мастер БХВ-Петербург Сысойкина М.А.
Предназначена для программистов.
260 руб
Язык, среда, разработка приложений Delphi 2005. Информационные технологии. Вычислительная техника Питер Фаронов В.В.
Книга содержит описание системы Delphi 2005 - среды разработчика и языка программирования, - с точки зрения программиста Delphi, а также достаточно полное руководство по созданию разнообразных программ общего назначения.
312 руб
Разработка и использование баз данных; Delphi: Основы работы в среде Delphi; Приемы создания приложений; Примеры программ - 288 с. {Быстрый старт } СПб: БХВ-Петербург Гофман В.Э., Хомоненко А.Д.
125 руб
Delphi: Экспресс-курс: Примеры программ - 288 с. Разработка и использование баз данных; Основы работы в среде Delphi; Приемы создания приложений; СПб: БХВ-Петербург Гофман В.Э., Хомоненко А.Д.
113 руб

Молочный гриб можно использовать для похудения, восстановления микрофлоры, очищения организмаМолочный гриб можно использовать для похудения, восстановления микрофлоры, очищения организма

(495) 105 99 23

Сайт char.ru это сборник рефератов и книг