Korzystanie z pojedyńczych funkcji WinAPI

0

Witam,
mam pewien problem. Mianowicie nie mogę doszukać się informacji jak w tworzonym programie użyć konkretnej funkcji WinAPI.
Każdy poradnik lub w kilku książkach, które mam opisują jak programować w Delphi w WinAPI, ale na zasadzie 'obsługa komunikatów', 'tworzenie formularza' itp.
Ja natomiast potrzebuję skorzystać z konkretnej funkcji zawartej w bibliotece "mscorlib.dll". Chodzi mi o funkcje szyfrujące i deszyfrujące (np. klasa System.Security.Cryptography).
Może jestem zbyt słaby z Delphi, albo jest to jakaś tajemna wiedza, bo szukam na tym forum i na "twu" Google i nic.

Proszę o pomoc w tym temacie, lub o naprowadzenie mnie na właściwy kierunek.

Za odpowiedzi:
BARDZO WAM DZIĘKUJĘ

ps.
Mam dokumentację MSDN dla MS Visual Studio 2010 i tam jest wszystko fajnie opisane. Z tym, że dla języka C++. A tu ni jak, ni skąd brak opisu użycia dla Delphi (Object Pascala)

0

Nie bawiłem się tym ale w menu Delphi wybierz "Component" -> "Import Component" -> "Import a Type Library" -> "Next" następnie z listy mscorlib.dll ( jeżeli jest kilka to w najnowszej wersji) -> "Next" -> "Unit Dir Name" wybierz folder projektu (gdzie masz inne moduły) -> "Next" zaznacz "Create Unit" i teraz pozostaje dodać do uses mscorlib_TLB w pliku projektu w którym wykorzystujesz funkcje i możesz korzystać a w jaki sposób to dokumentacja MSDN powinna podpowiedzieć.

0

z tego co pamiętam ta biblioteka jest w systemie w kilku wersjach: pod różne frameworki oraz pod wersję portable. Użyj odpowiedniej dla siebie wg instrukcji kolegi @kAzek

0

Dziękuję Wam za szybką odpowiedź.
Do tego sposobu co podał kolega kAzek już doszedłem wcześniej.
Może wyjdę na całkowitego tłumoka, ale muszę spytać:
W MSDN wyszukuję co mnie interesuje. Dla przykładu: System.Security.Cryptography.Rijndael
Mam teraz opis, składnię i przykłady, ale wszystko jest w oparciu o VB, C#, C++ i F#
Jak w takim razie mam użyć w Delphi danej, funkcji, klasy itp.?

Na chłopski rozum to widzę to tak. Czytam opis, podglądam przykład (i tu problem, "znam tylko Delphi") i na tej podstawie piszę kod, który jest zgodny składniowo z Delphi.

Ps.
Mam nadzieję, że nie zagmatwałem.
Może inaczej. Jeżeli ktoś z Was chciałby pokazać mi łopatologicznie jak to robi w swoim wydaniu, na podstawie przykładu z życia wziętego :-)

Dzięki serdeczne,
pozdrawiam

1
skubaniecpl napisał(a):

Na chłopski rozum to widzę to tak. Czytam opis, podglądam przykład (i tu problem, "znam tylko Delphi") i na tej podstawie piszę kod, który jest zgodny składniowo z Delphi.

Z reguły właśnie tak to wygląda, tyle że najpierw warto sprawdzić, czy biblioteka dołączona do IDE posiada już importy funkcji i całą wymaganą otoczkę (m.in. struktury i stałe) – szkoda tracić czas na coś, co już jest zrobione.

Jeśli jednak biblioteka importów nie zawiera, to trzeba sobie znaleźć opis funkcji na msdn, a następnie dopisać import (statyczny lub ładowanie dynamiczne – w zależności od wymagań), w razie potrzeby również zadeklarować struktury danych. Typy danych wykorzystywane powszechnie w funkcjach WinAPI, takie jak np. UINT, WINBOOL itd., na pewno znajdują się w module Windows, więc można z nich korzystać, a część z nich jest identyczna jak natywne typy pascalowe (np. Pointer czy LongInt). Problemem mogą być stałe, bo te nie są opisywane na msdn, więc trzeba się posiłkować wyszukiwarką i ich wartości po prostu szukać.


Może inaczej. Jeżeli ktoś z Was chciałby pokazać mi łopatologicznie jak to robi w swoim wydaniu, na podstawie przykładu z życia wziętego :-)

Jakiś czas temu, na potrzeby swojego tetrisowego softu chciałem skorzystać z funkcji ”przerabiającej” okno na wielowarstwowe, co wykonuje się za pomocą funkcji UpdateLayeredWindow. Efektem użycia tej funkcji jest sprawienie, aby splash screen obsługiwał półprzezroczystość – pisałem nawet o tym artykuł na blogu. Jednak w bibliotece Lazarusa funkcja ta nie jest importowana, więc musiałem sam dodać taki import i zrobiłem to tak jak opisałem w poprzednim paragrafie – nie było żadnych problemów.

Inny przykład – dotyczący tej samej aplikacji – to import funkcji rejestrującej i wyrejestrowującej font z pliku. Mowa o funkcjach AddFontResourceExW i RemoveFontResourceExW, których importów również brakuje w bibliotece. Znów zrobiłem tak jak opisałem wyżej, ale potrzebowałem również wartości dwóch stałych – FR_PRIVATE i FR_NOT_ENUM – których w bibliotece także brakuje. I tu był problem, bo na msdn nie doszukałem się ich opisu, ale za pomocą wyszukiwarki namierzyłem stary artykuł na jakimś zagranicznym blogu, w którym autor pokazał kod źródłowy z ręczną deklaracją tych stałych (co prawda w C++, ale to w niczym nie przeszkadza), a ostatecznie prawdziwość tych wartości potwierdził jeden z użytkowników tego forum, po sprawdzeniu jak to wygląda w Delphi (tam tych importów i stałych nie brakowało).


Jak widzisz, czasem trzeba się nakombinować, aby móc skorzystać z funkcji WinAPI. Niestety w przypadku Lazarusa jest ten problem, że jego biblioteki są silnie multiplatformowe, więc siła robocza dzielona jest na wiele platform, przez co wiele funkcji stricte windowsowych jeszcze nie zostało dodanych – czasem nawet takich, które w systemowym API istnieją od 20 lat. Delphi nie jest tak zaniedbane, więc w przypadku używania tego środowiska, rzadziej zachodzi potrzeba ręcznego dodawania importów.

0

Witam,
bardzo dziękuję za odpowiedź :-)
Siadam i zaczynam walczyć.

pozdrawiam Wszystkich

1 użytkowników online, w tym zalogowanych: 0, gości: 1