Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Dynamické volanie funkcií v DLL

dynamicky prepojovanej knižnici , alebo DLL , umožňuje aplikáciu načítať iba nevyhnutné minimum spustiteľný kód do pamäte pri spustení . Kedykoľvek program volá funkciu v DLL , operačný systém načíta DLL v pamäti v súlade so špecifikáciami programátora . Tak dlho , ako bežiaci program neobsahuje odkaz funkcie DLL , stačí , že knižnica DLL nie je zaberajú miesto . To ušetrí veľa zdrojov a posilňuje run - time výkon . Ak knižnica bola statická , všetky knižnice kód bude pripojený k spustiteľného kódu hlavného programu a obrie Program by mal zostať v pamäti po celú dobu behu . Unix alebo Linux verzie Windows DLL je zdieľaná knižnica , postavený v súlade s príponou " . Tak . " Windows , Unix a Linux majú špecifické konvencie pre prístup k funkciám v DLL alebo zdieľané knižnice . Export Windows DLL objektov pomocou dllexport Kĺúčové

funkcie , triedy , dátový prvok alebo člen funkcie triedy prístupné volania programu systému Windows , musíte ho najprv exportovať . Triedy alebo funkcie môžu byť vyvezené počas jeho definíciu pomocou kľúčového slova " __declspec ( dllexport ) " predtým , než funkcie , triedy alebo názov premennej , takto :

void __ declspec ( dllexport ) Moje_třída : public CObjectName { ..... }

V súboru DLL záhlaví , dať toto kľúčové slovo pred názov funkcie vo vyhlásení prototypu . Kľúčové slovo " __declspec ( dllexport ) " ukladá názvy funkcií v DLL exportnej tabuľke . Ak chcete šetriť priestor , ktorý táto tabuľka zaberá , používať radové číslovky namiesto názvy funkcií .
Vývoz Windows DLL objekty cez Definícia modulu súbory

Ako alternatívu ku kľúčovým slovom " __declspec ( dllexport ) , " vytvorte súbor modulu definícia , ktorá uvádza názov knižnice , voliteľný popis a uvádza názvy funkcií , tried a dátových premenných v DLL spolu s voliteľným poradovým hodnotami . Ordinálne hodnota funkcie sa pohybuje v rozmedzí od 1 do N , kde N je počet funkcií v DLL . Súbor definícia modulu má príponu " .. DEF " Nasleduje príklad súboru definície modulu alebo súbor DEF : .

KNIŽNICA ReportWriterDESCRIPTION Táto dynamická knižnica obsahuje generátor zostáv funkčnosť MyProduct.RPT_setup @ 1RPT_design @ 2RPT_run @ 3RPT_print @ 4

Ak vytvoríte Microsoft Foundation Class DLL pomocou Visual Studio je AppWizard , bude sprievodca vygeneruje kostru . DEF súbor pre DLL a pridať do projektu . Pridať položky k DLL funkcií v tomto . DEF súbor exportovať . Formát prototypu funkcie používané volajúci program musí zodpovedať formátu záznamov funkcie v súbore . DEF . Buď použiť jednoduché definície na oboch miestach , alebo , definícia kompilátora generované kompilátor špecifické v oboch miestach trvalo .
Import a Export a Extension DLL

Microsoft Foundation Class príponu DLL sa zvyčajne skladá z opakovane použiteľných tried odvodených od existujúcich typov tried MFC . Sú postavené pomocou DLL verziu MFC , a môže byť volaná z aplikácií a DLL postavené pomocou tejto zdieľanej verzie MFC . Ak chcete exportovať triedy v príponu DLL , použite makro " AFX_EXT_CLASS " pred názov triedy , ako je tento : Trieda AFX_EXT_CLASS CMyViewClass : public CView { //Telo triedy } ; Ak používate súbor DEF , pridajte nasledujúci kód makra na začiatku . a koniec rozšíreného súboru DLL záhlavia : # undef AFX_DATA # define AFX_DATA AFX_EXT_DATA // # undef AFX_DATA # define AFX_DATA

Tieto direktívy preprocesoru uistite sa , že premenné MFC a derivácie a vyvážané z rozšíreného DLL .
import funkcie DLL

druhej strane exportu objektov z knižníc DLL je ich import do aplikácie pomocou " __declspec ( dllimport ) " kľúčové slovo .
Vývoz C funkcia pre použitie v C alebo C + + spustiteľné

Ak volajúci program , alebo funkcia je napísaný + + , použite C " extern C smernice preprocesor " v záhlaví DLL v prípade , že funkcie DLL sú písané v C

Tu je príklad ://MyDLLFunctions.h # ifdef __ cplusplusExtern " C " { # endif__declspec ( dllimport ) void MyFunc01 ( ) ; __ declspec ( dllimport ) void MyFunc02 ( ) ; # ifdef __ cplusplus } //koniec zátvorky pre " externé C " smernice # endif

Ako alternatívu k určeniu smernici "Externé C " v záhlaví DLL , môžete zahrnúť súbor DLL hlavičku s " externou " C " " wrapper podmienečne , a to takto :

# ifdef __ cplusplusExtern " C " { # endif

# include " DLLPath \\ MyDLLFunctions.h "

# ifdef __ cplusplus } //koniec zátvorky pre " externé C " smernice # endif

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené