Încărcarea dinamică a modulelor

Descriere scurtă

Aceste funcții oferă o modalitate portabilă de încărcare dinamic a fișierelor obiect (cunoscute sub numele de "plug-in-uri"). Actuala implementare suportă toate sistemele care oferă execuția dlopen () (de exemplu Linux / Sun), precum și HP-UX prin shl_load () și Windows prin DLL-uri.







Programele pe care intenționați să le utilizați cu aceste funcții trebuie să fie legate de bibliotecile de ieșire folosind comanda pkg-config -libs gmodule-2.0.

Pentru a le utiliza, trebuie mai întâi să determinați dacă încărcarea dinamică este acceptată pe platforma pe care o utilizați apelând g_module_supported (). Dacă este acceptată, puteți deschide modulele cu g_module_open (). căutați identificatori modulați (de exemplu, nume de funcții) cu g_module_symbol (). și apoi închideți modulele cu g_module_close (). g_module_name () returnează numele fișierului modulului deschis curent.

Dacă oricare dintre funcțiile descrise mai sus eșuează, descrierea erorii poate fi găsită folosind g_module_error ().

caracteristică GModule implementează de numărare de referință pentru modulele deschise și suport pentru funcțiile de manipulare de întrerupere în modul, care se numește atunci când modulul este încărcat și descărcat (vezi GModuleCheckInit și GModuleUnload).

Dacă modulul dvs. introduce date statice pentru subsisteme comune în programul executabil, de exemplu, sunând la g_quark_from_static_string ("my-module-stuff"). trebuie să fie sigur că nu va fi descărcat niciodată apelând g_module_make_resident ().







Exemplul 12. Apelarea unei funcții definite într-un GModule

g_module_build_path ()

O modalitate portabilă de a crea un nume de fișier modul. Prefixul și sufixul specific pentru platformă sunt adăugate pentru numele fișierului, dacă este necesar, iar rezultatul este adăugat directorului utilizând delimitatorul de caractere corect.

Parametrul director trebuie să specifice directorul în care poate fi găsit modulul. Poate fi NULL sau un șir gol care indică faptul că modulul se află într-un director standard dependent de platformă, deși acest lucru nu este recomandat, deoarece poate fi găsit un modul incorect.

De exemplu, g_module_build_path de apel () în parametrul sistem Linux la un parametru de valoare director / lib și module_name egală cu valoarea „mylibrary“ return /lib/libmylibrary.so. Pe Windows, folosind \ Windows ca valoare a parametrului directorului se va returna \ Windows \ mylibrary.dll.

directorul în care este localizat modulul. Poate fi NULL sau un șir gol care indică faptul că este utilizat un director standard dependent de platformă, deși acest lucru nu este recomandat.

calea absolută a modulului, inclusiv prefixul și sufixul standard al bibliotecii. Trebuie să fie eliberat atunci când nu mai este necesar.

g_module_open ()

Deschide modulul. Dacă modulul este deja deschis, numărul de legături crește.

Mai întâi, g_module_open () încearcă să deschidă numele fișierului ca modul. Dacă aceasta nu reușește și numele fișierului are sufixul ".la" (și există o arhivă libtool), încearcă să deschidă modulul corespunzător. Dacă nu reușește și nu are sufixul corespunzător pentru platformă (G_MODULE_SUFFIX), acest sufix va fi atașat și modulul corespunzător va fi deschis. Dacă acest lucru nu reușește și numele fișierului nu are sufixul ".la", acest sufix este înlocuit și g_module_open () încearcă să deschidă modulul corespunzător. Dacă aceasta nu reușește, NULL este returnat.

numele fișierului modulului care conține, sau NULL pentru a obține GModulele reprezentând direct programul principal.







Trimiteți-le prietenilor: