borland cpp builder cw12

background image

Programowanie obiektowe. Ćwiczenie 12. 1

______________________________________________________________________










PROGRAMOWANIE OBIEKTOWE

ĆWICZENIE 12





Tworzenie biblioteki DLL

Aplikacja dołączająca bibliotekę statycznie

Aplikacja dołączająca bibliotekę dynamicznie

















background image

2

Programowanie obiektowe. Ćwiczenie 12.

______________________________________________________________________

______________________________________________________________________

I.

Wstęp

Zanim rozpoczniesz ćwiczenie, utwórz podkatalog COMPINFO w katalogu

Projects oraz utwórz szkielet projektu biblioteki DLL:

Uruchom Buildera

File







New





Other…

DLL Wizard

Ok

Source Type: C (pozostałe opcje wyłącz)

Ok

File







Save All..

W katalogu COMPINFO zapisz compinfo.c

Ok

W katalogu COMPINFO zapisz compinfo.bpr

Ok

View







Project Manager

Zaznacz ProjectGroup1 i kliknij prawym klawiszem myszy

Save Project Group As…

W katalogu COMPINFO zapisz CompInfoGroup.bpg

Ok

File







New





Other…

Text

Ok

File







Save As

W katalogu COMPINFO zapisz compinfo.h

Ok

W oknie Project Manager compinfo.dll i kliknij prawym klawiszem myszy

Add…

Wybierz plik compinfo.h

Ok

Zapamiętaj: do okna Project Manager uzyskuje się dostęp za pomocą Ctrl+Alt+F11

Mamy szkielet projektu biblioteki DLL, pozostaje teraz wpisać kod źródłowy do pliku
compinfo.c i compinfo.h.

Biblioteka COMPINFO.DLL ma zadanie udostępniać następujące funkcje (napisane
w języku C):

Nagłówek funkcji

Wartość zwracana przez funkcję

double GetLibVersion()

numer wersji biblioteki DLL

char* user_name()

nazwa użytkownika zalogowanego do
Windows

char* computer_name()

nazwa komputera

char* os_version()

nazwa i wersja systemu operacyjnego i
numer łatki

background image

Programowanie obiektowe. Ćwiczenie 12. 3

______________________________________________________________________

II.

Tworzenie kodu DLL

Kod w pliku compinfo.h


W oknie edytora (zakładka compinfo.h) wpisujemy następujący kod:

//---------------------------------------------------------------------------
// compinfo.h
// Biblioteka DLL informująca o parametrach systemu
// C++Builder 6.0 Personal
//---------------------------------------------------------------------------
#ifndef __COMPINFO_H
#define __COMPINFO_H

#if defined(__cplusplus)
extern "C"
{
#endif
__declspec( dllexport ) double GetLibVersion();
__declspec( dllexport ) char* user_name();
__declspec( dllexport ) char* computer_name();
__declspec( dllexport ) char* os_version();
#if defined(__cplusplus)
}
#endif

#define WM_FRUIT_CHANGE (WM_USER + 1001)
#endif // __COMPINFO_H

Kod w pliku compinfo.c


W oknie edytora (zakładka compinfo.c) wpisujemy następujący kod:

//---------------------------------------------------------------------------
// compinfo.c
// Biblioteka DLL informująca o parametrach systemu
// C++Builder 6.0 Personal
//---------------------------------------------------------------------------

#include <windows.h>
#include <stdio.h>
#include "compinfo.h"
//---------------------------------------------------------------------------


background image

4

Programowanie obiektowe. Ćwiczenie 12.

______________________________________________________________________

______________________________________________________________________


int WindowsVersion(char* os, char* version, char* other)
{
int NT = 0;
OSVERSIONINFO version_info;

version_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&version_info);
if (version_info.dwMajorVersion<4)
{
sprintf(os,"Windows NT");
sprintf(version,"3.x");
}
else
{
sprintf(version,"%d.%d.%04d", version_info.dwMajorVersion,
version_info.dwMinorVersion,
version_info.dwBuildNumber);
}
switch (version_info.dwPlatformId)
{
case VER_PLATFORM_WIN32s:
sprintf(os,"%s", "Microsoft Win32s");
break;
case VER_PLATFORM_WIN32_WINDOWS:
sprintf(os,"%s", "Microsoft Windows 95/98");
break;
case VER_PLATFORM_WIN32_NT:
NT = 1;
switch (version_info.dwMajorVersion)
{
case 4:
sprintf(os,"%s", "Microsoft Windows NT");
break;
case 5:
sprintf(os,"%s", "Microsoft Windows 2000");
break;
case 6:
sprintf(os,"%s", "Microsoft Windows XP");
break;
default:
sprintf(os,"%s", "Microsoft Windows ??");
}
break;
default:
sprintf(os,"%s", "Microsoft Windows ??");
}
sprintf(other,"%s", version_info.szCSDVersion);
return NT;
}

background image

Programowanie obiektowe. Ćwiczenie 12. 5

______________________________________________________________________


//---------------------------------------------------------------------------
#pragma argsused

int WINAPI DllEntryPoint(

HINSTANCE hinstDLL,
unsigned long fwdreason,
void* lpvReserved)

{
switch(fwdreason)
{

case DLL_PROCESS_ATTACH:

if (lpvReserved)

MessageBox(NULL,"Biblioteka DLL dołączona do procesu
(statycznie)", "DLLMain",MB_OK);

else

MessageBox(NULL,"Biblioteka DLL dołączona do procesu
(dynamicznie)", "DLLMain",MB_OK);

break;

case DLL_THREAD_ATTACH:

MessageBox(NULL,"Biblioteka DLL dołączona przez wątek",
"DLLMain",MB_OK);

break;

case DLL_THREAD_DETACH:

MessageBox(NULL,"Biblioteka DLL odłączona przez wątek",

"DLLMain",MB_OK);

break;

case DLL_PROCESS_DETACH:

MessageBox(NULL,"Biblioteka DLL odłączona od procesu",

"DLLMain",MB_OK);

break;
}
return 1; // zawsze zwracaj wartość true;
}
//---------------------------------------------------------------------------

const double version = 1.1;

double GetLibVersion() //Pobiera bieżącą wersję biblioteki DLL.
{

return version;

}
//---------------------------------------------------------------------------






background image

6

Programowanie obiektowe. Ćwiczenie 12.

______________________________________________________________________

______________________________________________________________________

char* user_name()
{
char name[MAX_PATH];
DWORD size = MAX_PATH;
GetUserName(name, &size);

return name;

}
//---------------------------------------------------------------------------

char* computer_name()
{
char name[MAX_PATH];
DWORD size = MAX_PATH;
GetComputerName(name, &size);

return name;

}
//---------------------------------------------------------------------------

char* os_version()
{
boolean NT;
char name[MAX_PATH];
char os[MAX_PATH];
char version[MAX_PATH];
char patch[MAX_PATH];
char *blank = " ";
NT = WindowsVersion(os,version,patch);
if (NT)
{
strcpy(name, os);
strcat(name, blank);
strcat(name, version);
strcat(name, blank);
strcat(name, patch);
}
else strcpy(name, os);

return name;

}
//---------------------------------------------------------------------------


Kompilacja biblioteki

Wykonaj kompilację projektu biblioteki DLL:

Project







Build compinfo


W wyniku kompilacji powstały dwa nowe pliki:
compinfo.dll, compinfo.lib.

background image

Programowanie obiektowe. Ćwiczenie 12. 7

______________________________________________________________________

III.

Tworzenie aplikacji korzystającej z

biblioteki (statycznie)

Tworzenie kodu aplikacji AppStatic

Zamknij aktualny projekt:

File







Close All

Utwórz podkatalog APPSTATIC w katalogu Projects oraz utwórz szkielet projektu
aplikacji AppStatic – zawierający pliki:

AppStatic.bpr

AppStatic.cpp

AppStaticForm.h

AppStaticForm.cpp

AppStaticForm.dfm


Skopiuj pliki: compinfo.h oraz compinfo.lib z katalogu COMPINFO do katalogu
APPSTATIC.
Plik compinfo.h będzie niezbędny w fazie kompilacji, aby poinformować kompilator
jakie funkcje będą wymagane w kodzie źródłowym aplikacji, a plik compinfo.lib
będzie wykorzystany w fazie konsolidacji (linkowania), aby dołączyć kod biblioteki do
generowanej aplikacji. (dodatkowo należy jeszcze dopisać ją do projektu aplikacji).

Dopisanie biblioteki COMPINFO.LIB do projektu

W oknie Project Manager compinfo.dll i kliknij prawym klawiszem myszy

Add…

Wybierz plik compinfo.lib

Ok


Utwórz formularz (patrz Rys.1 oraz opis komponentów)

Rys.1 Wygląd formularza Form1

background image

8

Programowanie obiektowe. Ćwiczenie 12.

______________________________________________________________________

______________________________________________________________________

Opis komponentów formularza (klasy Form1)

Przyciski:
Name = ButtonGetVersion

Caption= Pobierz wersję DLL

Name = ButtonGetUser

Caption= Get User Name

Name = ButtonGetComputer

Caption= Get Computer Name

Name = ButtonGetVerWin

Caption= Get OS Version


Pola edycyjne:
Name = EditVersion

pole będzie wyświetlało wersję DLL

Name = EditUser

pole będzie wyświetlało nazwę użytkownika

Name = EditComputer

pole będzie wyświetlało nazwę komputera

Name = EditVerWin

pole będzie wyświetlało wersję Windows


Etykiety:
Name = Label1

Caption= użytkownik

Name = Label2

Caption= komputer

Name = Label3

Caption= wersja systemu

Opis metod formularza (klasy Form1)


void __fastcall ButtonGetVersionClick(TObject *Sender) – obsługuje
kliknięcie przycisku ButtonGetVersion

void __fastcall ButtonGetUserClick(TObject *Sender) – obsługuje kliknięcie
przycisku ButtonGetUser

void __fastcall ButtonGetComputerClick(TObject *Sender) – obsługuje
kliknięcie przycisku ButtonGetComputer

void __fastcall ButtonGetVerWinClick(TObject *Sender) – obsługuje
kliknięcie przycisku ButtonGetVerWin

Wpisz kod źródłowy do plików AppStaticForm.h i AppStaticForm.cpp

Plik AppStaticForm.h


//---------------------------------------------------------------------------
// AppStaticForm.h
// Przykład statycznego dołączania biblioteki DLL
//---------------------------------------------------------------------------
#ifndef AppStaticFormH
#define AppStaticFormH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>

background image

Programowanie obiektowe. Ćwiczenie 12. 9

______________________________________________________________________

#include <Forms.hpp>
//---------------------------------------------------------------------------

class TForm1 : public TForm
{
__published: // IDE-managed Components
TEdit *EditVersion;
TButton *ButtonGetVersion;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TButton *ButtonGetUser;
TButton *ButtonGetComputer;
TEdit *EditUser;
TEdit *EditComputer;
TEdit *EditVerWin;
TButton *ButtonGetVerWin;

void __fastcall ButtonGetVersionClick(TObject *Sender);
void __fastcall ButtonGetUserClick(TObject *Sender);
void __fastcall ButtonGetComputerClick(TObject *Sender);
void __fastcall ButtonGetVerWinClick(TObject *Sender);
private:

// User declarations

HINSTANCE dllhandle;
public:

// User declarations

__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Plik AppStaticForm.cpp


#include <vcl.h>
#pragma hdrstop

#include "AppStaticForm.h"
#include "compinfo.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
//---------------------------------------------------------------------------

background image

10

Programowanie obiektowe. Ćwiczenie 12.

______________________________________________________________________

______________________________________________________________________


__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
dllhandle = 0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ButtonGetVersionClick(TObject *Sender)
{
EditVersion->Text = AnsiString(GetLibVersion());
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ButtonGetUserClick(TObject *Sender)
{
EditUser->Text = AnsiString(user_name());
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ButtonGetComputerClick(TObject *Sender)
{
EditComputer->Text = AnsiString(computer_name());
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ButtonGetVerWinClick(TObject *Sender)
{
EditVerWin->Text = AnsiString(os_version());
}
//---------------------------------------------------------------------------


Kompilacja aplikacji

Wykonaj kompilację projektu aplikacji:

Project







Build AppStatic


W wyniku kompilacji powstał nowy pliki:
AppStatic.exe.

Uruchomienie aplikacji


Aby aplikacja poprawnie pracowała, pliki AppStatic.exe.
oraz compinfo.lib muszą znajdować w tym samym katalogu.

Run







Run

background image

Programowanie obiektowe. Ćwiczenie 12. 11

______________________________________________________________________



Dołączaniem bibliotek zajmuje się wewnętrzna funkcja DLLMain.

Po uruchomieniu aplikacji na ekranie pojawi się komunikat informujący o dołączeniu
biblioteki i sposobie dołączenia:

Rys.2 Statyczne dołączenie biblioteki


Następnie pojawia się okno główne aplikacji AppStatic.
Przyciski powodują wywoływanie odpowiednich funkcji z biblioteki COMPIFO.LIB.

Rys.3 Wygląd pracującej aplikacji APPSTATIC


Po zakończeniu aplikacji (a dokładnie po zamknięciu okna) następuje odłączenie
biblioteki co objawia się odpowiednim komunikatem.

Rys.4 Odłączenie biblioteki



background image

12

Programowanie obiektowe. Ćwiczenie 12.

______________________________________________________________________

______________________________________________________________________

IV.

Tworzenie aplikacji korzystającej z

biblioteki (dynamicznie)

Tworzenie kodu aplikacji AppDynamic

Zamknij aktualny projekt:

File







Close All

Utwórz podkatalog APPDYNAMIC w katalogu Projects oraz utwórz szkielet projektu
aplikacji AppDynamic – zawierający pliki:

AppDynamic.bpr

AppDynamic.cpp

AppDynamicForm.h

AppDynamicForm.cpp

AppDynamicForm.dfm


UWAGA: w oknie Project Manager NIE NALEśY dopisywać żadnego dodatkowego
pliku. W tym przykładzie do ładowania biblioteki użyjemy funkcji LoadLibrary.
Funkcja ta będzie szukała pliku compinfo.dll w katalogu
C:\WINDOWS\SYSTEM32, a jeśli nie znajdzie to w katalogu aktualnym.

Kopiowanie biblioteki COMPINFO.DLL do środowiska Windows

Skopiuj plik do compinfo.dll do katalogu C:\WINDOWS\SYSTEM32

Usuń plik compinfo.dll z katalogu APPDYNAMIC


Utwórz formularz (patrz Rys.5 oraz opis komponentów)

Opis komponentów formularza (klasy Form1)

Przyciski:
Name = ButtonLoadLibrary

Caption= Wczytaj compinfo.DLL

Name = ButtonProcAddress

Caption= Pobierz adres funkcji DLL

Name = ButtonUnloadLibrary

Caption= Zwolnij compinfo.DLL

Name = ButtonGetVersion

Caption= Pobierz wersję DLL

Name = ButtonGetUser

Caption= nazwa użytkownika

Name = ButtonGetComputer

Caption= nazwa komputera

Name = ButtonGetVerWin

Caption= wersja Windows

Właściwość Enable przycisków ustaw na false. Dla przycisku ButtonLoadLibrary na
true

Etykiety:
Name = Label1

Caption= Uchwyt DLL

background image

Programowanie obiektowe. Ćwiczenie 12. 13

______________________________________________________________________


Pola edycyjne:
Name = EditDLLHandle

pole będzie wyświetlało nr uchwytu do DLL

Name = EditVersion

pole będzie wyświetlało wersję DLL

Name = EditUser

pole będzie wyświetlało nazwę użytkownika

Name = EditComputer

pole będzie wyświetlało nazwę komputera

Name = EditVerWin

pole będzie wyświetlało wersję Windows


Rys.5 Wygląd formularza Form1

Opis metod formularza (klasy Form1)


void __fastcall ButtonLoadLibraryClick(TObject *Sender) – obsługuje kliknięcie
przycisku ButtonLoadLibrary

void __fastcall ButtonUnloadLibraryClick(TObject *Sender) – obsługuje kliknięcie
przycisku ButtonUnloadLibrary

void __fastcall ButtonGetVersionClick(TObject *Sender) – obsługuje kliknięcie
przycisku ButtonGetVersion

void __fastcall ButtonProcAddressClick(TObject *Sender)– obsługuje kliknięcie
przycisku ButtonProcAddress

void __fastcall ButtonGetUserClick(TObject *Sender) – obsługuje kliknięcie
przycisku ButtonGetUser

background image

14

Programowanie obiektowe. Ćwiczenie 12.

______________________________________________________________________

______________________________________________________________________

void __fastcall ButtonGetComputerClick(TObject *Sender) – obsługuje kliknięcie
przycisku ButtonGetComputer

void __fastcall ButtonGetVerWinClick(TObject *Sender) – obsługuje kliknięcie
przycisku ButtonGetVerWin


Wpisz kod źródłowy do plików AppDynamicForm.h i AppDynamicForm.cpp

Plik AppDynamicForm.h


//---------------------------------------------------------------------------
// AppStaticForm.h
//
// Przykład dynamicznego dołączania biblioteki DLL
//---------------------------------------------------------------------------
#ifndef AppDynamicFormH
#define AppDynamicFormH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------

class TForm1 : public TForm
{
__published:

// IDE-managed Components

TButton *ButtonLoadLibrary;
TEdit *EditVersion;
TButton *ButtonUnloadLibrary;
TButton *ButtonGetVersion;
TButton *ButtonProcAddress;
TLabel *Label1;
TEdit *EditDLLHandle;
TButton *ButtonGetUser;
TButton *ButtonGetComputer;
TEdit *EditUser;
TEdit *EditComputer;
TEdit *EditVerWin;
TButton *ButtonGetVerWin;
void __fastcall ButtonLoadLibraryClick(TObject *Sender);
void __fastcall ButtonUnloadLibraryClick(TObject *Sender);
void __fastcall ButtonGetVersionClick(TObject *Sender);
void __fastcall ButtonProcAddressClick(TObject *Sender);
void __fastcall ButtonGetUserClick(TObject *Sender);
void __fastcall ButtonGetComputerClick(TObject *Sender);
void __fastcall ButtonGetVerWinClick(TObject *Sender);

background image

Programowanie obiektowe. Ćwiczenie 12. 15

______________________________________________________________________

private:

// User declarations

HINSTANCE dllhandle;
typedef double (*GETLIBVERSION)();
GETLIBVERSION GetLibVersion;

typedef char* (*USER_NAME)();
USER_NAME user_name;

typedef char* (*COMPUTER_NAME)();
COMPUTER_NAME computer_name;

typedef char* (*OS_VERSION)();
OS_VERSION os_version;

public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Plik AppDynamicForm.cpp


//---------------------------------------------------------------------------
// AppDynamicForm.cpp
//
// Przykład dynamicznego dołączania biblioteki DLL
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "AppDynamicForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
dllhandle = 0;
}
//---------------------------------------------------------------------------

background image

16

Programowanie obiektowe. Ćwiczenie 12.

______________________________________________________________________

______________________________________________________________________



void __fastcall TForm1::ButtonLoadLibraryClick(TObject *Sender)
{
dllhandle = LoadLibrary("compinfo.dll"); // zachowaj uchwyt
EditDLLHandle->Text = AnsiString((int)dllhandle);
if (dllhandle)
{
ButtonUnloadLibrary->Enabled = true;
ButtonProcAddress->Enabled = true;

}
else
{
ShowMessage("Błąd podczas dołączania biblioteki DLL");
}
}

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

void __fastcall TForm1::ButtonUnloadLibraryClick(TObject *Sender)
{
if (dllhandle)
{
FreeLibrary(dllhandle);
ButtonUnloadLibrary->Enabled = false;
ButtonProcAddress->Enabled = false;
ButtonGetVersion->Enabled = false;
ButtonGetUser->Enabled = false;
EditUser->Text = "";
ButtonGetComputer->Enabled = false;
EditComputer->Text = "";
ButtonGetVerWin->Enabled = false;
EditVerWin->Enabled = false;
EditVerWin->Text = "";
EditDLLHandle->Text = "";
}
}

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

void __fastcall TForm1::ButtonProcAddressClick(TObject *Sender)
{
if (dllhandle)
{
GetLibVersion =
(GETLIBVERSION)GetProcAddress(dllhandle, "_GetLibVersion");
if (GetLibVersion) ButtonGetVersion->Enabled = true;

background image

Programowanie obiektowe. Ćwiczenie 12. 17

______________________________________________________________________

user_name =
(USER_NAME)GetProcAddress(dllhandle, "_user_name");
if (user_name) ButtonGetUser->Enabled = true;

computer_name =
(COMPUTER_NAME)GetProcAddress(dllhandle, "_computer_name");
if (computer_name) ButtonGetComputer->Enabled = true;

os_version =
(OS_VERSION)GetProcAddress(dllhandle, "_os_version");
if (os_version) ButtonGetVerWin->Enabled = true;

}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ButtonGetVersionClick(TObject *Sender)
{

if (dllhandle)
{
EditVersion->Text = AnsiString(GetLibVersion());
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ButtonGetUserClick(TObject *Sender)
{
EditUser->Text = AnsiString(user_name());
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ButtonGetComputerClick(TObject *Sender)
{
EditComputer->Text = AnsiString(computer_name());
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ButtonGetVerWinClick(TObject *Sender)
{
EditVerWin->Text = AnsiString(os_version());
}
//---------------------------------------------------------------------------






background image

18

Programowanie obiektowe. Ćwiczenie 12.

______________________________________________________________________

______________________________________________________________________

Kompilacja aplikacji

Wykonaj kompilację projektu aplikacji:

Project







Build AppDynamic


W wyniku kompilacji powstał nowy pliki:
AppDynamic.exe.

Uruchomienie aplikacji


Aby aplikacja poprawnie pracowała, plik compinfo.dll musi znajdować katalogu
C:\WINDOWS\SYSTEM32, albo w tym samym co aplikacja.

Run







Run


Dołączaniem bibliotek zajmuje się wewnętrzna funkcja DLLMain.

Po uruchomieniu aplikacji na ekranie pojawi się okno główne aplikacji AppDynamic.

Rys.6 Wygląd okna aplikacji APPDYNAMIC po uruchomieniu


Po kliknięciu przycisku Wczytaj compinfo.dll , nastąpi dołączenie dynamiczne
biblioteki oraz uaktywnienie przycisków służących do pobrania adresów funkcji,
zwalniania biblioteki DLL (rys. 6).


background image

Programowanie obiektowe. Ćwiczenie 12. 19

______________________________________________________________________



Wyświetli się komunikat informujący o dołączeniu biblioteki i sposobie jej dołączenia
(rys. 7).

Rys.7 Dynamiczne dołączenie biblioteki

Rys.8 Wygląd pracującej aplikacji APPDYNAMIC

















background image

20

Programowanie obiektowe. Ćwiczenie 12.

______________________________________________________________________

______________________________________________________________________

Rys.9 Wygląd pracującej aplikacji APPDYNAMIC


Następnie klikamy przycisk Pobierz adres funkcji DLL oraz przycisk Pobierz wersję
DLL
– uaktywniają się pozostałe przyciski (rys. 9).

Pobieramy dane o systemie za pomocą odpowiednich przycisków.

Rys.10 Wygląd pracującej aplikacji APPDYNAMIC



background image

Programowanie obiektowe. Ćwiczenie 12. 21

______________________________________________________________________



Po zakończeniu aplikacji (a dokładnie po zamknięciu okna) następuje odłączenie
biblioteki co objawia się odpowiednim komunikatem (rys. 11).

Rys.11 Odłączenie biblioteki

Biblioteka WinAPI


Następujące funkcje zostały napisane w oparciu o wewnętrzną bibliotekę WinAPI. Jej
opis znajduje się w pliku Pomocy On Line (Start







Wszystkie programy





Borland

C++ Builder







Help





MS SDK Help Files





Win 32 SDK Reference):


int WindowsVersion(char* os, char* version, char* other)
GetUserName(name, &size)
GetComputerName(name, &size)


























background image

22

Programowanie obiektowe. Ćwiczenie 12.

______________________________________________________________________

______________________________________________________________________

SPIS TREŚCI

I.

Wstęp ........................................................................................................................ 2

II. Tworzenie kodu DLL................................................................................................ 3

Kod w pliku compinfo.h ........................................................................................... 3
Kod w pliku compinfo.c ........................................................................................... 3
Kompilacja biblioteki ............................................................................................... 6

III.

Tworzenie aplikacji korzystającej z biblioteki (statycznie).................................. 7

Tworzenie kodu aplikacji AppStatic......................................................................... 7
Dopisanie biblioteki COMPINFO.LIB do projektu ................................................. 7
Opis komponentów formularza (klasy Form1)......................................................... 8
Opis metod formularza (klasy Form1)..................................................................... 8
Plik AppStaticForm.h ............................................................................................... 8
Plik AppStaticForm.cpp............................................................................................ 9
Kompilacja aplikacji ............................................................................................... 10
Uruchomienie aplikacji........................................................................................... 10

IV.

Tworzenie aplikacji korzystającej z biblioteki (dynamicznie) ........................... 12

Tworzenie kodu aplikacji AppDynamic ................................................................. 12
Kopiowanie biblioteki COMPINFO.DLL do środowiska Windows...................... 12
Opis komponentów formularza (klasy Form1)....................................................... 12
Opis metod formularza (klasy Form1)................................................................... 13
Plik AppDynamicForm.h........................................................................................ 14
Plik AppDynamicForm.cpp .................................................................................... 15
Kompilacja aplikacji ............................................................................................... 18
Uruchomienie aplikacji........................................................................................... 18

Biblioteka WinAPI ......................................................................................................... 21


Wyszukiwarka

Podobne podstrony:
borland cpp builder cw10
borland cpp builder cw13
borland cpp builder cw9
borland cpp builder cw2
borland cpp builder cw4
borland cpp builder cw3
borland cpp builder id 92024 Nieznany
borland cpp builder cw5
borland cpp builder cw1 id 9202 Nieznany
borland cpp builder cw6
borland cpp builder cw7
borland cpp builder cw11 id 920 Nieznany (2)
borland cpp builder cw8
borland cpp builder cw10
borland cpp builder cw13
borland cpp builder cw9

więcej podobnych podstron