Podpięta DLL'ka nie widzi wymaganego przez siebie pliku

0

Witam,
sprawa jest następująca:
Mam DLL'ke od zewnętrznego producenta oprogramowania, dla zainteresowanych to program RouteLogix do wyznaczania m.in. tras)

DLL'ka wymaga pliku językowego - także dostarczonego przez producenta.

Producent daje przykład wykorzystanie jej w C++/Delphi, tutaj plik językowy musi się znajdować w lokalizacji aplikacji (*.exe), w przeciwnym razie wali błędem, że nie am pliku językowego.

Próbuje napisać obsługę w java, podpinam DLL'ke, wszystko wygląda OK do czasu kiedy próbuję wywołać metodę wymagającą pliku językowego. Wywala oczywiście błąd, że go nie ma. Problem w tym, że obojętnie gdzie bym go nie umieścił (lokalizacja *.jar, java.exe, *.dll'ki) zachowuje się tak samo.

Co sprawdzić, gdzie jeszcze DLL'ka może szukać pliku? Jak to sprawdzić?

0

Zgadywałbym że dllka szuka pliku w CWD i plik powinien być w katalogu z poziomu którego uruchamiasz swój program. Jesli odpalasz program przez IDE to będzie to katalog główny projektu.
Mógłbyś też spróbować użyć jakiegoś strace (pod windowsa jest dostępny w cygwinie) i popatrzeć na wywołania systemowe.

0

Sytuacja jest następująca:
DLL jest w katalogu projektu, podczas uruchamiania z netBeans widzi DLL'le, wykonuje pierwsza metodę i wywala błąd nie znalezienia pliku językowego (w rzeczywistości plik jest tam gdzie DLL);

Podczas uruchomienia *.jar z linii komend w ogóle nie znajduje DLL'ki, mimo że znajduje się w katalogu *.jar'a. Próbowałem też ustawiać zanim załaduję DLL'le zmienne 'java.library.path' i 'jna.library.path' na ścieżkę lokalizacji DLL'ki. Nic nie pomaga.

 
package rl6_test;

import com.sun.jna.Library;
import com.sun.jna.Native;
import java.nio.file.Path;
import java.nio.file.Paths;

public class App{  

  public interface RL6 extends Library  {    
    public void RL6_PREINIT(String lang);  
  }  
  public static void main(String[] args)  {    
    Path dllPath = Paths.get(System.getProperty("user.dir"));    
    System.setProperty("java.library.path", dllPath.toString());

    RL6 instance = (RL6) Native.loadLibrary("rl6_dll", RL6.class);    
    instance.RL6_PREINIT("");  
  }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1