Promotic

PmaDll - Szczegółowy opis obiektu

Patrz: obiekt PmaDll.

Opis składni pliku deklaracji funkcji w bibliotece DLL:
Żeby system PROMOTIC wiedział, które funkcje z biblioteki DLL knihovny można zastosować i jaka jest forma tych funkcji, to do biblioteki DLL musi być dołączony plik z rozszerzeniem .INC, o nazwie takiej samej jak nazwa biblioteki DLL (na przykład w przypadku biblioteki XY.DLL musi być plik XY.INC). W tym pliku .INC jeden wiersz odpowiada deklaracji właśnie jednej funkcji.

Składnia wiersza:
Declare Function MyFce Lib "MyDll" ([ByVal] Par As TypePar[, ...]) As TypeRet
gdzie:
MyFce nazwa deklarowanej funkcji
MyDll nazwa biblioteki DLL
Par nazwa parametru funkcji
TypePar typ danych parametru (patrz kolejna tabela)
TypeRet typ danych wartości zwrotnej funkcji

Jeżeli przed nazwą parametru znajduje się słowo kluczowe ByVal, wtedy parametr ten jest przekazywany przez wartość. W innym przypadku jest przekazywany przez odniesienie.

Są możliwe następujące typy danych parametrów:
Nazwa typu Wielkość pamięci znaczenie: Zakres
Byte 1 bajt Liczba całkowita od 0 do 255
Integer 2 bajty Liczba całkowita od -32 768 do +32 767
Long 4 bajty Liczba całkowita od -2 147 483 648 do +2 147 483 647
Single 4 bajty Liczba rzeczywista +/- 3,4E +/- 38 (7 cyfr znaczących)
Double 8 bajtów Liczba rzeczywista +/- 1,7E +/- 308 (15 cyfr znaczących)
String według ilości znaków Łańcuch tekstowy
Any suma bajtów pozycji podległych Tablica wartości


Przekazywanie struktur i tablic:
Jeżeli w deklaracji funkcji w pliku .INC w parametrze typu znajduje się słovo Any, wtedy system PROMOTIC umożliwia w parametrze funkcji przekazać dovolne dane. Przy wywołaniu funkcji wytworzy buffer, do którego jest skopiowana binarna zawartość przekazywanej zmiennej (np. tablicy wytworzonej przy pomocy VBScript.Array). Ten bufor zostanie przekazany wywoływanej funkcji jako parametr. Po zakończeniu funkcji dane z bufora przekaże z powrotem do danej zmiennej. A więc jeżeli masz na przykład tablicę, której skład typów danych dokładnie odpowiada przekazywanej strukturze, to możesz stosować także funkcje, które w parametrach posiadają strkutury.
!Uwaga! Przy przekazywaniu struktur i tablic muszą zostać dokładnie dotrzymane wymagane typy danych pozycji tablicy, ponieważ nieodpowiednie ich zastosowanie może mieć destrukcyjne działanie!
Notatki:
1. Binarna zawartość struktury może zawierać wypełnienia przeznaczone do uzupełnienia pozycji struktury na daną ilość bajtów.
2. Jest konieczne jawne ustawienie typów przekazywanych danych przy pomocy funkcji grupy CInt, CLng, itd.
3. Nigdy nie szkodzi, jeżeli do parametrów funkcji jest przekazana większa ilość danych, aniżeli tego wymaga dana funkcja.


Przykład1:
Załóżmy, że biblioteka C:\Library\MyDll.dll zawiera funkcję "factor" do obliczenia silni danej liczby. Ta funkcja ma parametr typu 2-bajtowa liczba całkowita rzeczywistej i zwraca liczbę rzeczywistą o podwójnej precyzji (8-bajtowa liczba rzeczywista). Jeżeli chcesz tę funkcję zastosować w systemie PROMOTIC, wtedy plik C:\Library\MyDll.inc musi zawierać następujący wiersz:
Declare Function factor Lib "usrdll" (ByVal n As Integer) As Double
Przykład2:
Załóżmy, że biblioteka C:\Library\MyDll.dll zawiera funkcję "nibble", która służy do uzyskania wartości 4 dolnych bitów liczby całkowitej. Funkcja ta zwraca w 1-bajtowej liczbie człkowitej 0 jeżeli wszystkie cztery bity są równe zaru, w innym przypadku zwraca jedynkę. Do swoich parametrów nr. 2 do nr. 5 (typu Byte) ustawia wartości 4 dolnych bitów parametru nr. 1, który również jest typu Byte. Jeżeli chcesz taką funkcję zastosować w systemie PROMOTIC, wtedy plik C:\Library\MyDll.inc musi zawierać następujący wiersz:
Declare Function nibble Lib "usrdll" (ByVal B As Byte, bit1 As Byte, bit2 As Byte, bit3 As Byte, bit4 As Byte) As Byte
Zauważ, że parametr B jest przekazywany przez wartość, podczas kiedy pozostałe parametry są przekazywane przez odniesienie (referencję).
Przykład3:
Zastosowanie obiektu PmaDll:
Funkcja z wyżej przedstawionym sposobem załadowanej biblioteki udostępnia właściwość Fce. Miejmy obiekt "MyDll" typu PmaDll, znajdujący się w folderze "Lib". Jeżeli chcemy wywołać jego funkcję "factor", wtedy możemy pisać:
VBScriptWybierz oraz skopiuj do schowka

Dim f
f = pMe.Pm("/Lib/MyDll").Fce.factor(6)
Jeżeli chcemy funkcje biblioteki stosować częściej, wtedy jest bardziej dogodne:
VBScriptWybierz oraz skopiuj do schowka

Dim oFce, f, g
Set oFce = pMe.Pm("/Lib/MyDll").Fce
f = oFce.factor(6)
g = oFce.factor(10)
Jeżeli chcemy wykorzystywać daną bibliotekę globalnie, wtedy jest dogodnym wytworzenie odniesienia do właściwości Fce w oknie konfiguracyjnym "Zmienne".
Przykład4:
Deklaracja funkcji DLL w języku C++
Ten przykład demonstruje, jak wygląda interfejs funkcji "factor" oraz "nibble" z przykładów 1 i 2 w języku C. Zmienna typu double ma wielkość 8B, zmienna typu char 1B oraz zmienna typu short 2B
extern "C" double __declspec(dllexport) __cdecl factor(short n);
extern "C" char __declspec(dllexport) __cdecl nibble(char B, char *bit1, char *bit2, char *bit3, char *bit4);
W kompilatorach trzecich producentów eksport funkcji z biblioteki DLL (tu __declspec(dllexport)) może być zrealizowany w zupełnie inny sposób. Tak samo w innych językach programowania jest konieczne dokładnie przestudiować dokumentację związaną z eksportem i importem funkcji bibliotek DLL.
Nawigacja:
 
 
- Dll
- Fce
- PmaDll - Szczegółowy opis obiektu
 
 
© MICROSYS, spol. s r. o.