Logo

Noční oblohaOstatní produktyDownload
Visual BasicOdkazyKontaktO autorovi

Úvodní stránka

Visual Basic

Windows API Type Library

Otázky a odpovědi

Co je type library?
Co je Windows API Type Library?
Jak nainstalovat Windows API Type Library?
Jak odinstalovat Windows API Type Library?
Jak používat funkci SendMessage?
Upřednostňuji jiný způsob deklarace funkcí DLL knihoven. Mohu to kombinovat?

Co je type library?

Type library (knihovna typů) deklaruje třídy, rozhraní, konstanty a procedury, které jsou nabízeny aplikacemi nebo dynamickými knihovnami. Type library jsou obvykle v programech v podobě resource, ale může to být i samostatný soubor s koncovkou .tlb nebo .olb. Seznam všech registrovaných typových knihoven je k dispozici v dialogovém okně References...

Co je Windows API Type Library?

Soubor Win32.tlb obsahuje deklarace těch nejběžnějších procedur, konstant a typů, jež jsou součástí Windows API. Jakmile tuto knihovnu připojíte k projektu, všechny deklarace máte okamžitě k dispozici. Je to v podstatě totéž jako zkopírovat obsah souboru WIN32API.TXT do vašeho projektu. Tedy až na to, že se nemusíte obávat nadbytku nevyužitých deklarací.

Další výhodou je to, že téměř všechny API konstanty jsou definovány jako výčtové typy (Enum) a řada procedur s nimi takto pracuje. To značně usnadňuje jejich zapisování, viz. příklad, kdy vkládáte druhý parametr funkce SendMessage a Visual Basic automaticky nabídne seznam dostupných konstant:

Zde je několik postřehů, na které je nutné pamatovat:

  • typovou knihovnu není nutné přikládat k výslednému programu
  • několik deklarací neodpovídá deklaracím v souboru WIN32API.TXT. Např. poslední parametr funkce SendMessage je deklarován jako As Long místo As Any. Podrobnosti naleznete zde.
  • když voláte DLL proceduru, jež je definovaná pomocí příznaku Declare, Visual Basic zkontroluje, zda je příslušná dynamická knihovna k dispozici. Pokud není, je vyvolána chyba, kterou lze však odchytit. Pokud voláte DLL proceduru deklarovanou pomocí Windows API Type Library, přítomnost dynamické knihovny se testuje v okamžiku načítání programu. Jestliže není příslušná DLL knihovna k dispozici, program se ani nerozběhne. V našem případě by ale neměly nastat žádné potíže, protože veškeré DLL knihovny jsou součástí jádra Windows

Jak nainstalovat Windows API Type Library?

Stáhněte si soubor win32.zip a rozbalte si v něm obsažený soubor Win32.tlb kamkoliv na disk.

Ve Visual Basicu vytvořte nový projekt a v menu Project zvolte položku References. Klikněte na tlačítko Browse, vyhledejte extrahovaný soubor a poté klepněte na tlačítko Ok. Tím dojde k registraci typové knihovny.
Pokud používáte Windows NT nebo Windows 2000, budete pro registraci potřebovat práva administrátora.

V případě nahrazení staré verze novou stačí tu původní přepsat. Další registrace není nutná.

Kdykoliv budete chtít přidat typovou knihovnu do vašeho projektu, stačí otevřít dialog References a zaškrtnout položku "32-bit Windows API declarations (ANSI)".

Jak odinstalovat Windows API Type Library?

Pokud chcete odstranit typovou knihovnu ze systému, smažte soubor Win32.tlb. Příslušná položka zmizí následně i z dialogu References.

V případě zájmu můžete ještě v registrech odstranit následující klíč:

HKEY_CLASSES_ROOT\TypeLib\{CD6E8B50-033A-11D2-B805-EBE0D6230404}

Jak používat funkci SendMessage?

API Text Viewer deklaruje funkci SendMessage následovně:

Declare Function SendMessage    Lib "user32" Alias "SendMessageA" ( _
   ByVal hWnd As Long, ByVal uMsg As Long, _
   ByVal wParam As Long, lParam As Any) As Long

Protože je lParam deklarován jako As Any, můžete pro něj použít jakýkoliv datový typ. To však není příliš bezpečné, protože Visual Basic nedokáže provést žádnou typovou kontrolu.

K zajištění vyšší bezpečnosti deklaruje Windows API Type Library funkce SendMessage a PostMessage v několika variantách:

Varianta
Poslední parametr
SendMessage ByVal lParam As Long
SendMessageAsString ByVal lParam As String
SendMessageAsAny lParam As Any
PostMessage ByVal lParam As Long
PostMessageAsAny lParam As Any

Jelikož je ve většině případů poslední parametr typu long, byl zvolen jako výchozí.

Upřednostňuji jiný způsob deklarace funkcí DLL knihoven. Mohu to kombinovat?

Klidně. Požadovanou funkci nadeklarujte v modulu pomocí příznaku Declare. Tato deklarace bude mít přednost před stejnojmennou funkcí ve Windows API Type Library. Například pokud v modulu použijete:

Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _

   ByVal hWnd As Long, ByVal uMsg As Long, _
   ByVal wParam As Long, lParam As Any) As Long

a funkci SendMessage zavoláte jako obvykle:

SendMessage txtName.hWnd, EM_SETSEL, 0, ByVal -1&

nezbavujete se možnosti využít i verzi z typové knihovny:

Win32.SendMessage txtName.hWnd, EM_SETSEL, 0, -1

(Win32 je název knihovny Windows API Type Library.)

 

Nahoru


Převzato z http://www.geocities.com/practicalvb/vb/

 
Copyright © 2000 - 2003, Jan Tošovský