Delpi EXE-be fordított DLL útvonala
2019-12-16T16:54:47+01:00
2019-12-18T12:48:01+01:00
2022-08-11T16:50:29+02:00
csanesz
Sziasztok!

Delphi 10.3-ban fejlesztek, és MySQL adatbázishoz kell benne csatlakozom.
FireDAC komponenssel csatlakozom a MySQL adatbázishoz.
Ehhez használom az FDPhysMySQLDriverLink-et, aminek a VendorLib értékben adom meg a DLL útvonalát. libmysql.dll

Sikerült a DLL-t belefordítani az EXE-be, így nem kell már külön DLL.
Van rá megoldás, hogy a VendorLib megtalálja a dll a resource-ból?
Valahogy meg lehet adni neki valami virtuális útvonalat hogy hol található a DLL?
Nézegettem, hogy valami Streambe át lehet-e adni, de nem igazán találtam rá megoldást?
Valakinek van esetleg valami ötlete?

Előre is köszönöm!
Mutasd a teljes hozzászólást!
Köszönöm mindenkinek a válaszát.

Utána néztem a forrásokban, de mindenhol a DLL útvonala kell hogy meglegyen adva, nincs lehetőség arra, hogy Stream-et adjak át.
Úgyhogy marad a DLL az EXE mellett.
Mutasd a teljes hozzászólást!

  • Hali

    Ha resources van benne van a dll akkor mint stream tényleg ki tudod olvasni, ha nem lehet beállítani a komponensek streamet akkor levizsgálod hogy az exe mellett ott van e a dll ha igen nem csinálsz semmit ha nincs akkor a resourcebol kiolvasott streamben lévő dll-t kinented oda. Így már biztos megtudod adni az elérési utat a komponensnek. 

    Ez segít hogy kell resource-bol kiolvasni egy dll-t egy streamben.  

    ms : TMemoryStream; rs : TResourceStream; begin if 0 <> FindResource(hInstance, 'DemoDLL', RT_RCDATA) then begin rs := TResourceStream.Create(hInstance, 'DemoDLL', RT_RCDATA); ms := TMemoryStream.Create; try ms.LoadFromStream(rs); ms.Position := 0; m_DllDataSize := ms.Size; mp_DllData := GetMemory(m_DllDataSize); ms.Read(mp_DllData^, m_DllDataSize); finally ms.Free; rs.Free; end; end; end
    Mutasd a teljes hozzászólást!
  • Szia!
    Kiegészíteném: ha ezt a módszert választod, arra vigyázz, hogy legyen jogosultságod írni a program könyvtárát (ha Program Files-ba van telepítve, ez nem lesz jellemző ugyanis).
    Gábor
    Mutasd a teljes hozzászólást!
  • Van olyan megoldás is hogy nem kell a resource-ból a diskre menteni.

    lásd:

    DSPlayer/memorymodule
    Mutasd a teljes hozzászólást!
  • Hello
    Jogilag vigyázni kellene a különféle dll-ek alkamazásba való berakásával.
    LGPL -es a libmysql szerintem nem fordíthatod bele az alkalmazásba.
    Érdemes lenne körbenézni.
    Mutasd a teljes hozzászólást!
  • Off: java-ban lehet ilyet csinálni, egy JAR-ban lévő JAR-t rá lehet bűvészelni a ClassPath-ra, feltéve, hogy a külső JAR nincs tömörítve (vö: zip.exe -n opciója)
    Mutasd a teljes hozzászólást!
  • Köszönöm mindenkinek a válaszát.

    Utána néztem a forrásokban, de mindenhol a DLL útvonala kell hogy meglegyen adva, nincs lehetőség arra, hogy Stream-et adjak át.
    Úgyhogy marad a DLL az EXE mellett.
    Mutasd a teljes hozzászólást!
abcd