Výsledky 1 až 13 z 13

Téma: [Java]+[C++] JNI

  1. #1

    Standardní [Java]+[C++] JNI

    Zdravím,
    dělám bakalářku na téma ovládání sběrnice USB z prostředí Javy, na sběrnici USB má vyset obvod FTD245BM. V javě musím načíst knihovnu s ovladači, jenže to nejde přímo, ale musím ji načíst v C++ a udělat DLL, kterou pak načtu v Javě přes Java Native Interface. Knihovnu v C-éčku v poho načtu, z Javy DLL taky ale při spuštění mi to hodí následující chybu, nevím co s tím , jsem taky zmatený co mám vlastně volat.

    Exception in thread "main" java.lang.UnsatisfiedLinkError: ftStatus
    at BP.ftStatus(Native Method)
    at BP.sss(BP.java:7)
    at BP.<init>(BP.java:12)
    at BP.main(BP.java:17)

    Zde je k dispozici zdrojak z Javy:

    http://bp.aktualne.cz/BP.java

    z Céčka:

    http://bp.aktualne.cz/bp.cpp

    a hlavičkový soubor knihivny ovladače\:

    http://bp.aktualne.cz/Ftd2xx.h


    Budu rád za každou radu, popsal jsem to trochu zmateně, kdyžtak dovysvětlím.Díky moc

  2. #2

    Standardní

    S JNI zkusenosti nemam tak strilim od boku

    Neni to tim, ze ty mas definovanu nativni metodu
    Kód:
    public native float ftStatus&#40;&#41;;
    kterou v tom zdrojaku pro C++, vubec nemas definovanou?

  3. #3

    Standardní

    No, ona ta metoda je definovaná, ale v knihovně ovladače, tzn. že já ji přes C-éčko jenom volám, nejsem si jistý jestli volat zrovna ftStatus, ale zkoušel jsem různé možnosti a výsledek je víceméně stejný = stejná chyba

  4. #4
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    322

    Standardní

    No tato výjima znamená, že v knihovně nebyla nalezená metoda označená v java třídě jako native... Já si prostě myslím to co jedik Musíš mít tu fci v té C++ knihovně napřímo a určenou pro export.
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  5. #5

    Standardní

    Citace Původně odeslal Anduril
    No tato výjima znamená, že v knihovně nebyla nalezená metoda označená v java třídě jako native... Já si prostě myslím to co jedik Musíš mít tu fci v té C++ knihovně napřímo a určenou pro export.
    OK, pokusím se to zbastlit, díky za rady

  6. #6

    Standardní

    Exportovat myslíš tímto způsobem?

    JNIEXPORT void JNICALL FT_ListDevices
    (JNIEnv *env, jclass cl)

    jen nevím, jestli tam nechat to void a co dát na místo FT_ListDevices, nějak mi to nic nebere.Jsem z toho už fakt blbej a nevím čí su, takže nevím jestli to správně píšu do kódu

    K těm ovladačům je i mauál, zde je (615kB)

    EDIT: zde je link na něj http://bp.aktualne.cz/progman.pdf

    není mi jasny, co mám třeba volat, když si chci zjistit informace o počtu připojených zařízení? strana 4 nahoře.
    Díky za konstruktivní pomoc

  7. #7

    Standardní

    U nas na skole jsem dokonce nasel toto
    http://linux456.vsb.cz/~las034/jni/index.html

    Mozna ti to helfne. Je tam treba jinak ukazany ten export v Cecku. Zkus to pozkouset.

  8. #8

    Standardní

    Citace Původně odeslal jedik
    U nas na skole jsem dokonce nasel toto
    http://linux456.vsb.cz/~las034/jni/index.html

    Mozna ti to helfne. Je tam treba jinak ukazany ten export v Cecku. Zkus to pozkouset.
    Díky, omrknu to, mám sice půjčenou knížku ale je to z edice Programmer to Programmer a podle toho taky vypadá

  9. #9

    Standardní

    Už jsem to vyřešil, díky všem, pravda je nakonec někde uprostřed toho,co jsem si myslel a jak jsem to dělal

    PLEASE LOCK

  10. #10

    Standardní

    Citace Původně odeslal boss183
    Už jsem to vyřešil, díky všem, pravda je nakonec někde uprostřed toho,co jsem si myslel a jak jsem to dělal

    PLEASE LOCK
    Fajn Ale kdybys tu napsal reseni, urcite by budouci hledajici s podobnym problemem meli radost

  11. #11

    Standardní

    Citace Původně odeslal jedik
    Citace Původně odeslal boss183
    Už jsem to vyřešil, díky všem, pravda je nakonec někde uprostřed toho,co jsem si myslel a jak jsem to dělal

    PLEASE LOCK
    Fajn Ale kdybys tu napsal reseni, urcite by budouci hledajici s podobnym problemem meli radost
    OK, stále na tom pracuji, ale jsou to kosmetické úpravy, takže mi dejte čas a o víkendu to sem hodím

  12. #12

    Standardní

    Tak to zde ukážu na jednoduchém příkladě, mimochodem jediný mi tak pořádně funguje, je celkem problém najít společnou řeč mezi proměnnýma Javy a C++
    Kód:
    1.Nejdřív je vhodny stvořit něco v Javě, třeba &#58;
    
    public class FT &#123;
      static &#123;
            System.loadLibrary&#40;"uz"&#41;;
      &#125;
    
    
      public static void main&#40;String&#91;&#93; args&#41; &#123;
         int x = vypis&#40;&#41;;
         System.out.println&#40;x&#41;;
       &#125;
    
       public static native int vypis&#40;&#41;;
     &#125;
    2.Zkompilovat a pomocí javah vytvořit hlavičkový soubor
    3.A můžeme se plácat v Céčku:

    Kód:
    #include <stdio.h>
    #include "windows.h"
    #include <tchar.h>
    #include "ftd2xx.h"
    #include <FT.h>
    #include  <jni.h>
    
    
    JNIEXPORT jint JNICALL Java_FT_vypis
    &#40;JNIEnv *, jclass&#41; &#123;
     
    FT_STATUS ftStatus;
    DWORD numDevs;
    ftStatus = FT_ListDevices&#40;&numDevs,NULL,FT_LIST_NUMBER_ONLY&#41;;
    if &#40;ftStatus == FT_OK&#41; &#123; 
    	
    	
    	printf&#40;"Pocet pripojenych zarizeni je "&#41;;
    	
    	&#125;
    else 
    	&#123; 
    	printf&#40;"Chyba"&#41;;
    	
    	&#125;
    
    	
    	return numDevs;
    	&#125;
    kde FT.h je hlavičkový soubor Javy, který jsmen splácali.
    4.Při spuštění vrátí počet připojených zařízení.



    EDIT: Takže klidně LOCK

  13. #13

    Standardní

    Ještě mám jeden dotaz, vše je už OK.
    Spíš se mi jedná o vylepšení stávajícho stavu, takže to není urgentní.
    Jak předat C++ proměnnou z Javy, jedná se mi o INT, furt se stím nemůžu domluvit

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •