Programowanie obiektowe. Ćwiczenie 12. 1
______________________________________________________________________
PROGRAMOWANIE OBIEKTOWE
ĆWICZENIE 12
" Tworzenie biblioteki DLL
" Aplikacja dołączająca bibliotekę statycznie
" Aplikacja dołączająca bibliotekę dynamicznie
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 zró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
______________________________________________________________________
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
#include
#include "compinfo.h"
//---------------------------------------------------------------------------
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;
}
______________________________________________________________________
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;
}
//---------------------------------------------------------------------------
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.
______________________________________________________________________
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 zró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
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 zró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
#include
#include
______________________________________________________________________
Programowanie obiektowe. Ćwiczenie 12. 9
______________________________________________________________________
#include
//---------------------------------------------------------------------------
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
#pragma hdrstop
#include "AppStaticForm.h"
#include "compinfo.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
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
______________________________________________________________________
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
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
______________________________________________________________________
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
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 zró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
#include
#include
#include
//---------------------------------------------------------------------------
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);
______________________________________________________________________
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
#pragma hdrstop
#include "AppDynamicForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
dllhandle = 0;
}
//---------------------------------------------------------------------------
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;
______________________________________________________________________
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());
}
//---------------------------------------------------------------------------
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).
______________________________________________________________________
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
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
______________________________________________________________________
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)
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 cw1
borland cpp builder cw5
borland cpp builder cw10
borland cpp builder cw8
borland cpp builder cw3
borland cpp builder cw9
borland cpp builder cw2
borland cpp builder
borland cpp builder cw11 algorytm
borland cpp builder cw4
borland cpp builder cw6
borland cpp builder cw7
borland cpp builder cw13
SQL access in Borland C Builder
więcej podobnych podstron