borland cpp builder cw12, Informatyka, DELPHI i BUILDER, kurs borland
[ Pobierz całość w formacie PDF ]
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 ź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
______________________________________________________________________
·
·
·
·
·
·
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"
//---------------------------------------------------------------------------
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);
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.
{
}
//---------------------------------------------------------------------------
else
return version;
[ Pobierz całość w formacie PDF ]