HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Milyen függvények vannak egy DLL-ben?


Példaprogram letöltése

8380 bájt

E példában egy olyan komponenst készítünk, mely képes arra, hogy egy property-jében megadott DLL állományból előszedje az összes olyan DLL-ben lévő függvény nevét, mely kívülről is elérhető. Ettől kezdve a DLL bármelyik függvényét használhatjuk saját programunkból is, ha tudjuk az adott függvény paraméter listáját.

A mellékelt példaprogram megnyitása előtt az ExportList.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens használatához annak DllFileName nevű property-jében kell megadni a DLL állomány nevét, elérési útvonallal. Ezt követően a DLL-ben lévő függvények máris kiolvashatók a Functions nevű TStringList típusú property-ből.
Nézzük a megvalósítást: ha a megadott állomány létezik, akkor állunk neki csak a függvény nevek kiolvasásához.
  if FDllFileName<>'' then begin
    if FileExists(FDllFileName) then begin
A MapAndLoad függvénnyel fogjuk megnyitni és betölteni az adott DLL-t, a megnyitást csak olvashatóként tesszük meg. Eredményül egy LoadedImage típusú struktúra kerül feltöltésre, mely a további munkánkhoz lesz szükséges.
      if MapAndLoad(PChar(FDllFileName), nil, @li, true, true) then begin
        try
A következő lépésben az ImageDirectoryEntryToData függvényt hívjuk meg, hogy lekérdezhessük a DLL-ben lévő exportált függvények leírását adó adatterületet. Ehhez első paraméterként az adatok bázis címét kell megadni, mely az előbbi függvényhívásunk LoadImage struktúrájában adott a MappedAddress mezőben.
A függvény harmadik paramétere a lekérdezendő adatot adja meg, mivel minket most az exportált függvény lista érdekel, így az IMAGE_DIRECTORY_ENTRY_EXPORT konstanst használjuk, de ha arra lennénk kíváncsiak, hogy a DLL milyen más DLL által szolgáltatott függvényeket használ, akkor az IMAGE_DIRECTORY_ENTRY_IMPORT konstanst kellene használnunk. További lehetőségeket az alábbi táblázat foglalja össze:
Konstans Leírás
IMAGE_DIRECTORY_ENTRY_EXPORT Export directory
IMAGE_DIRECTORY_ENTRY_IMPORT Import directory
IMAGE_DIRECTORY_ENTRY_RESOURCE Resource directory
IMAGE_DIRECTORY_ENTRY_EXCEPTION Exception directory
IMAGE_DIRECTORY_ENTRY_SECURITY Security directory
IMAGE_DIRECTORY_ENTRY_BASERELOC Base relocation table
IMAGE_DIRECTORY_ENTRY_DEBUG Debug directory
IMAGE_DIRECTORY_ENTRY_ARCHITECTURE Architecture-specific data
IMAGE_DIRECTORY_ENTRY_GLOBALPTR Relative virtual address of global pointer
IMAGE_DIRECTORY_ENTRY_TLS Thread local storage directory
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG Load configuration directory
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT Bound import directory
IMAGE_DIRECTORY_ENTRY_IAT Import address table
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT Delay import table
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR COM descriptor table
A függvény sikeres futása esetén egy ImageExportDirectory struktúrára mutató pointert ad vissza.
          ied:=ImageDirectoryEntryToData(li.MappedAddress, false, IMAGE_DIRECTORY_ENTRY_EXPORT, a);
          if ied<>nil then begin
Felhasználva a kapott adatot, most már elérhetjük az exportált függvények neveit. Ehhez az ImageRvaToVa függvényt használjuk.
            wa:=ImageRvaToVa(li.FileHeader, li.MappedAddress, DWORD(ied^.AddressOfNames), ish);
Most már közvetlenül tudjuk olvasni a neveket, melyhez egy ciklust használunk, hogy az összes függvény nevet kiolvashassuk. A ciklusmagban az egyes nevek lekérdezéséhez ismét az ImageRvaToVa függvény ad segítséget ehhez.
            for i := 0 to ied^.NumberOfNames-1 do begin
              FFunctions.Add(PChar(ImageRvaToVa(li.FileHeader, li.MappedAddress, wa^[i], ish)));
            end;
          end;
        finally
          UnMapAndLoad(@li);
        end;
      end;
    end;
  end;

Cikksorozat

#IDKategóriaCikk címeSorozat
2591WindowsTippek és trükkök - RAS - Modem csengetési szám állítása1. rész
2622WindowsTippek és trükkök - Program futtatása más felhasználóként2. rész
2640WindowsA Windows ikonméretének megváltoztatása és Windows 2000 Asztaltémák3. rész
2657WindowsTippek és trükkök - Internet Explorer4. rész
2667WindowsTippek és trükkök5. rész
2684WindowsAlapértelmezések állítása, telepítési fájlok helye, intéző nézetek6. rész
2696WindowsBiztonsági trükkök7. rész
2702WindowsWindows XP trükkök8. rész
2729WindowsWindows 2000 és XP tippek, trükkök9. rész
2757WindowsRegistry trükkök10. rész
2784WindowsTippek, trükkök11. rész
2829WindowsTippek, trükkök12. rész
2889WindowsWindows XP tippek13. rész
2909WindowsTippek Windows XP-hez14. rész
2919WindowsWindows tippek15. rész
2924WindowsWindows tippek16. rész
2963WindowsWindows tippek17. rész
2973WindowsWindows Tippek18. rész
2981WindowsWindows tippek19. rész
2990WindowsTippek-trükkök20. rész
3027WindowsIIS tippek21. rész
3034WindowsWindows XP tippek-trükkök22. rész
3088WindowsWindows 2000/XP tippek, trükkök23. rész
3133WindowsWindows XP tippcsokor24. rész
3140WindowsWindows XP tippek, trükkök25. rész
3152WindowsXP és IIS tippek - trükkök26. rész
3158WindowsWindows XP tippek, trükkök27. rész
3168WindowsTippek, trükkök28. rész
3170WindowsRegistry trükkök29. rész
3179WindowsTippek, trükkök30. rész
3197WindowsWindows XP tippek, trükkök31. rész
3205WindowsTippek, trükkök32. rész
3214WindowsTippek, trükkök33. rész
3223WindowsTippek, trükkök34. rész
3233WindowsTippek, trükkök35. rész
3271WindowsTippek, trükkök36. rész
3307WindowsTippek, trükkök37. rész
3370WindowsTippek, trükkök38. rész
3399WindowsTippek, trükkök39. rész
3510WindowsTippek, trükkök40. rész
3611WindowsHardverrel kapcsolatos tippek, trükkök41. rész
3668WindowsRegistry trükkök42. rész
3711WindowsTippek, trükkök43. rész
3771WindowsTippek, trükkök44. rész
3801WindowsTippek, trükkök45. rész
3831WindowsTippek, trükkök46. rész
3891WindowsTippek, trükkök47. rész
3921WindowsTippek, trükkök48. rész
3981WindowsTippek, trükkök49. rész
4041WindowsTippek, trükkök50. rész
4071WindowsTippek, trükkök51. rész
4151WindowsTippek, trükkök52. rész
4171C#Tippek, trükkök53. rész
4211WindowsTippek, trükkök54. rész
4251WindowsTippek, trükkök55. rész
4281WindowsTippek, trükkök56. rész
3589DelphiTippek, trükkök57. rész
3718DelphiTippek, trükkök58. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 369. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |