Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: jRegistryKey kirjasto .dll:n sisällyttäminen

Tumettaja [08.05.2009 16:46:36]

#

Käytössäni on jRegistryKey-kirjasto jonka avulla Javalla voi päästä käsiksi windowsin rekisteriin. Olen seurannut ohjeita ja sijoittanut jRegistryKey.jar tiedoston Javan lib/ext kansioon ja jRegistryKey.dll tiedoston Javan bin kansioon.

Kääntäessä kaikki pelaa niinkuin pitääkin, mutta kun yritän tehdä projektista .jar tiedoston, tulee ongelmia. Kun luon .jar tiedoston, käyttämäni editori (BlueJ) sisällyttää samaan kansioon jRegistryKey.jar tiedoston, mutta .dll tiedosto jää vain Javan bin kansioon. Näin toiselta koneelta (jolla ei jRegistry.dll tiedostoa ole) ei voi suorittaa ohjelmaani.

Miten tuon .dll tiedoston voisi saaha mukaan ohjelmaani, että se pyörisi sitten joka koneella?

Metabolix [08.05.2009 17:27:11]

#

Jos et tee ohjelmaa, jonka tarkoituksena olisi erityisesti käsitellä Windowsin rekisteriä, älä pilaa sen yhteensopivuutta Windows-jutuilla vaan käytä tallentamiseen tiedostoja.

Itse tutkin juuri tätä kirjastojen lataamista viime kesänä. Kaikkien Google-tulosten perusteella kirjaston kuljettaminen JARissa ehdottomasti ei ole mahdollista eikä missään nimessä saisikaan olla, koska on Javan ideologian vastaista jakaa käyttöjärjestelmä- ja arkkitehtuuririippuvaisia asioita paketin mukana.

Purkkaratkaisu kuitenkin löytyi omin neuvoin, ja se on testattu toimivaksi sekä Windowsissa että Linuxissa. Voi olla, että rajoitetut käyttöoikeudet tai innokkaat viruksentorjuntaohjelmat estävät tämänkin kikan.

Temppu vaatii ladattavan kirjaston Java-puolen muokkaamista: DLL ladataan yleensä metodilla System.loadLibrary(java.lang.String). Nämä kutsut täytyy muuttaa käyttämään omaa latausfunktiota. Funktion täytyy tunnistaa, mistä kirjastosta on kyse, kopioida oikea kirjastotiedosto paketista väliaikaisesti jonnekin ja ladata se sieltä metodilla System.load(java.lang.String).

Tiedosto täytyy sisällyttää pakettiin samalla tavalla kuin esimerkiksi kuvat tai muu data.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta