Записки сисадмина
Алексей Никипольский
Пятница, 22.11.2024, 01:13
 
Меню
Настройка windows XP [38]
тонкости настройки, скрытые возможности
Программирование [8]
Нюансы, примеры, мои наработки и прочая полезная информация
Защита [28]
Компьютера, данных, интернет соединений и прочая полезная информация по защите
Обзор новинок [15]
Новинки ПО и железа
Обмен опытом [20]
Заработок в сети [9]
Все виды заработка в сети интернет, обзор, анализ, рекомендации
Распознование [10]
Все о методах и способах распознавания графической информации. Взлом капчи, методы и способы анализа...
Электронные книги [4]
По PHP CSS SQL PERL программированию Всё что есть в свободном доступе в интернете на разных ресурсах.
WEB программирование [9]
Всё о программировании WEB PHP Java PERL HTTP HTML и т.п.
Взлом [6]
методика взлома, примеры взлома, способы защиты от взлома
Онлайн сервисы [2]
Полезные сервисы онлайн
Администрирование [27]
Опыт системного администрирования
Статистика
Календарь
«  Февраль 2011  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28
Главная » 2011 » Февраль » 25 » как создать DLL
18:47
как создать DLL

Рассмотрим для чего нужны DLL (Dynamic Link Library - динамически компануемая библиотека) и как их создавать. DLL- это участок кода хранимый в файле с расширением .dll. Код может быть использован другими программами, но сама по себе библиотека программой не является. Вобщем-то, динамически компонуемые библиотеки представляют собой набор скомпилированныых функций. Но у этих библиотек есть свои особенности, так например, если какие то две или более программы для Windows одновременно исполняются и используют функции, находящиеся в одной DLL, то в памяти будет постоянно находится только одна библиотека, обеспечивая тем самым экономное расходование памяти. Загрузка библиотеки в память может быть статической и динамической.
При статической загрузке DLL автоматически загружается при запуске исользующего ее приложения. Такая DLL содержит экспортируемые функции, описание которых находится в файле библиотеки импорта(import library file - .lib). Для использования статической загрузки вы должны на этапе компоновки к программе подключить .lib файл вашей DLL. В C++ Builder это сводится к включения в проект .lib файла через менджер проектов.
При диамической загрузке вы можете загружать DLL при необходимости, выгрузить ее когода она не нужна. Однако работать с такими библиотеками сложнее чем со статическими. Рассмотрим создание и использование DLL статической загрузки.
Статическая загрузка
Создадим сперва проект (File / New / DLL). Будет создан проект, содержащий следующее:
1
2
3
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long
{ return 1; }

и длинный коментарий предупреждающий вас о том, что для работо способности вашей DLL необходимо снеи обеспечить поствку некоторых dll если вы используете экземпляры класса String.
Для экспорта и импорта из DLL необходимо использовать моди фикаторы __export и __import соответсвенно. Но в C++ Builder можно использовать новое ключевое слово __delspec() с параметрами dllexport и dllimport соответсвенно. Сами понимаете, что для того чтобы эспортировать функции из библиотеки еужен один заголовочный файл с описаниями _delspec(dllexport) для экспортируемых функций, для импорта функций в приложение вам необходимо будет поставить анологичный заголовочный файл но с _delspec(dllimport) описаниями, что достаточно неудобно. Эта проблема решается легко: добавте в заголовочный файл библиотеки следующее:

C++ Builder
#if defined(BUILD_DLL)
#  define DLL_EXP __declspec(dllexport)
#else
# if defined(BUILD_APP)
#  define DLL_EXP __declspec(dllimport)
# else
#  define DLL_EXP
# endif
#endif

в исходном файле DLL напишите #define BUILD_DLL, а вместо __declspec(dllexport) пишите DLL_EXP. При написании программы добавте строчку #define BUILD_APP, и просто подключите заголовочный файл DLL.Пример DLL: файл P.cpp

#define BUILD_DLL
#include
#include "p.h"
#pragma hdrstop

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) {
        return 1;
        }
void Message(char *s) {
        i=10;
        Application->MessageBox(s,"From DLL",IDOK);
        }
Файл P.h
#if defined(BUILD_DLL)
# define DLL_EXP __declspec(dllexport)
#else
# if defined(BUILD_APP)
# define DLL_EXP __declspec(dllimport)
# else
# define DLL_EXP
# endif
#endif
 
DLL_EXP void Message(char *s);
DLL_EXP int i;


Cкомпилируйте проект
Если вы нажмете Run то после завершенния построения будет выдано сообщение что данная программа не может быть исполнена (естественно). Теперь напишем вызывающую программу. В том же каталоге создайде новый проект (File / New Application) в форму поместите одну кнопку и создай обработчик события OnClick. Ваш исполняемый файл должен представлять собой следующее:
//------------------------------------------------------------------------
#include 
#define BUILD_APP
#pragma hdrstop
#include "p.h"
#include "Unit1.h"
#include 
//-------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {
    }
 
//-------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) {
    char c[10];
    Message("roma");
    for( ; i>0;i--) {
        sprintf(c,"Example %d",i );
        Application->MessageBox("Example of using DLL variable",(char*)c,IDOK);
    }
}
 
//-------------------------------------------------------------------------
Не забудьте об объявлениях в начале файла. Зайдите в менеджер проектов.Там откройте свой проект и добавте .lib файл из предыдушего проект с DLL( правый клик, пункт ADD). Запустите проект.
Как видите, для того, чтобы вашу DLL можно было использовать необходимо три файла: сама DLL, заголовочный файл и библиотечный файл .lib.
Динамическая загрузка
Динамическая загрузка горазда сложнее. Однако для динамической загрузки требуется только сама DLL ( не ненужен ни .lib ни заголовочный файл, хотя его можно исполбзовать для описания экспортируемых функций для предполагемого пользователя).
Давайте рассмотрим на примере, как производится динамическая загрузка. Создайте новый прокт DLL и внесите в него следующее:
extern "C" void __export  Message(char *s)  {
        Application->MessageBox(s,"From DLL",IDOK);
        }
Cкомпилируйте проект, в результате чего будет создана DLL.
Теперь создайте проект приложения анологичный проекту для использования статической загрузки (форма с кнопкой и обработчиком события кнопки OnClick) ниже приведен код приложения Unit15.cpp)
//--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit15.h" #include //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {         } //---------------------------------------------------------------------------   void __fastcall TForm1::Button1Click(TObject *Sender) {         void (__stdcall *Message)(char *s);         HINSTANCE dllp = LoadLibrary("p.dll");         if (dllp) {                 Message= (void(__stdcall *) (char*))                 GetProcAddress(dllp, "_Message");                 if (Message) Message("Hi From Dinamic DLL");                 }         FreeLibrary(dllp);         } //---------------------------------------------------------------------------
запустите это проект, при нажатии на кнопку должно выдаватся сообшение. Теперь разберемся, как это работает.
• void (__stdcall *Message)(char *s);-объявление указателя на функцию.
• HINSTANCE dllp = LoadLibrary("p.dll");- загрузка библиотеки в память.
• Message= (void(__stdcall *) (char*)) GetProcAddress(dllp, "_Message"); присвоение указателю адреса функции DLL.
• Message("Hi From Dinamic DLL"); рабочий вызов фунциий (собственно то для чего все это и делается).
• FreeLibrary(dllp);- выгрузка библиотеки из памяти.


Рекомендую Вам также почитать:


  • Windows 8, возможно, выйдет уже в следующем году
  • Консольный Windows XP
  • Простые советы по более разумному выбору и использованию паролей
  • Как обезопасить данные на портативных носителях
  • Windows XP и Windows Vista – наращивание возможностей сети
  • Распознавание атрибутов текстовых символов ( О.А. Славин )
  • Исправление кодировки в командной строке
  • Начало в системном администрировании, эникейство
  • Службы в Windows XP. Отключаем неиспользуемые службы.
  • разблокировать Диспетчер задач через реестр

  • Загрузить, скачать Программирование, как создать DLL бесплатно.
    Скачать как создать DLL бесплатно
    как создать DLL бесплатно и без регистрации.

    При копировании материала указывайте источник

    как создать DLL download free


    Категория: Программирование | Просмотров: 4332 | Добавил: Никипольский-Алексей | Теги: Библиотека, Dll, создать | Рейтинг: 0.0/0
    Всего комментариев: 0
    avatar
    Мои услуги на Kwork
    Like It


    Copyright Алексей Никипольский © 2009 - 2024