user:skripty:dlls
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
user:skripty:dlls [2016/09/08 07:49] – [Vytvoření DLL knihovny pro použití v GeoGetu] gord | user:skripty:dlls [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 145: | Line 145: | ||
Pokud takto změníte volací konvenci a knihovnu použijete také ve své vlastní aplikaci vytvořené v C/C++, je na to třeba pamatovat a knihovní funkce použít správně. | Pokud takto změníte volací konvenci a knihovnu použijete také ve své vlastní aplikaci vytvořené v C/C++, je na to třeba pamatovat a knihovní funkce použít správně. | ||
+ | |||
+ | |||
+ | ===== Přebírání parametru typu string z DLL knihovny ===== | ||
+ | |||
+ | <WRAP important> | ||
+ | |||
+ | * knihovní funkce má navíc 2 parametry: adresu textového bufferu a jeho alokovanou velikost | ||
+ | * místo aby funkce vracela string, zápíše string do bufferu a vrátí počet zapsaných znaků | ||
+ | |||
+ | Takže s ohledem na výše řečené bude plugin obsahovat něco takovéhoto: | ||
+ | |||
+ | <code delphi> | ||
+ | //deklarace knihovní funkce | ||
+ | function SoucetStr(s1, | ||
+ | ... | ||
+ | |||
+ | //volání a převzetí vráceného textu | ||
+ | const MAX_BUFR_LENGTH=256; | ||
+ | |||
+ | var sBuffer: | ||
+ | // !! bude na konci sBuffer obsahovat prazdny text, | ||
+ | // !! protoze 1. byt znaku bude mit hodnotu 0 | ||
+ | // !! a to bude chapano jako konec textu | ||
+ | iLen: | ||
+ | begin | ||
+ | ... | ||
+ | SetLength(sBuffer, | ||
+ | iLen: | ||
+ | SetLength(sBuffer, | ||
+ | ... | ||
+ | end; | ||
+ | </ | ||
+ | |||
+ | a funkce v DLL knihovně může vypadat třeba nějak takto: | ||
+ | |||
+ | <code C++> | ||
+ | LIB_EXPORT int SoucetStr(LPCSTR s1, LPCSTR s2, LPSTR sBuffer, int iMaxLen){ | ||
+ | CString cs=CString(s1)+CString(s2); | ||
+ | strcpy_s(sBuffer, | ||
+ | return(strlen(sBuffer)); | ||
+ | } | ||
+ | </ |
user/skripty/dlls.1473313770.txt.gz · Last modified: 2016/09/08 00:00 (external edit)