BorlandC++Builder1

Автор: Пользователь скрыл имя, 09 Октября 2011 в 01:57, статья

Краткое описание

Borland C++ Builder - выпущенное недавно компанией Borland средство быстрой азработки приложений, позволяющее создавать приложения на языке C++, используя при этом среду разработки и библиотеку компонентов Delphi. В настоящей статье рассматривается среда разработки C++ Builder и основные приемы, применяемые при проектировании пользовательского интерфейса.

Оглавление

Введение
Среда разработки C++ Builder
Компоненты C++ Builder
Свойства компонентов
События
Методы
Менеджер проектов
Создание приложений в С++ Builder
Пример: создание простейшего приложения

Файлы: 1 файл

BorlandC++Builder1.doc

— 1.61 Мб (Скачать)

// DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling

// EXE's to use the BORLNDMM.DLL as their memory manager. In these cases,

// the file BORLNDMM.DLL should be deployed along with your DLL.

// To avoid using BORLNDMM.DLL, pass string information using "char *" or

// ShortString parameters.

//

// If your DLL uses the dynamic version of the RTL, you do not need to

// explicitly add MEMMGR.LIB as this will be done implicitly for you

//-------------------------------------------------------------------------

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;

    Скомпилируйте проект.

    Если  вы нажмете 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) ниже приведен код приложения:(Unit11.cpp)

//---------------------------------------------------------------------------

#include

#pragma hdrstop

#include "Unit11.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);- выгрузка библиотеки из памяти.

    Обратите  внимание на то, что призагрузке  можно указать точное местоположние  библиотеки (необезательно в том  же каталоге где и приложение).

Информация о работе BorlandC++Builder1