Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    25

    JNI "C" Indirizzo di memoria

    Ciao ho una scheda che gestisce degli I/O, ho un esempio fatto in "c", non riesco ad entrare in sintonia con JNI, inoltre ho difficoltà con l'inglese, qualcuno mi sa dire, per favore, come posso convertire una funzione tipo quella di riga 5


    1 int result;
    2 WORD major, minor;
    3 const int BUF_LENGTH = 128;
    4 TCHAR buf[BUF_LENGTH]; // Buffer length includes the null character.
    5 SusiGetVersion(&major, &minor);
    6 printf("Version: (Major, Minor) = (%i, %i)\n", major, minor);

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: JNI "C" Indirizzo di memoria

    Originariamente inviato da robyf1
    Ciao ho una scheda che gestisce degli I/O, ho un esempio fatto in "c", non riesco ad entrare in sintonia con JNI, inoltre ho difficoltà con l'inglese, qualcuno mi sa dire, per favore, come posso convertire una funzione tipo quella di riga 5
    Se non riesci ad entrare in "sintonia" con JNI è probabilmente perché non ne hai compreso le finalità. JNI consente di invocare funzioni su una libreria dinamica (DLL) scritta in codice "nativo" che però deve avere certe caratteristiche e rispettare una serie di convenzioni imposte da JNI.
    La tua DLL nativa può poi invocare quello che ti pare .... funzioni native/specifiche del S.O. o altro.

    Immagino che da Java vuoi invocare quella funzione SusiGetVersion() di una qualche libreria nativa (non so dire quale). Bene, non puoi farlo direttamente. Devi realizzare una tua DLL che dovrà avere una funzione con un certo nome e con una serie di parametri che sono imposti da JNI in base alla signature del metodo della classe Java marcato come "native".

    Per non dilungarmi troppo: avevo fatto un esempio minimale in questa discussione. Non so se può esserti utile ... spero.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    25
    grossomodo sono riuscito ad "interfacciarmi" con alcune funzioni (queste ultime non mi danno errori di compilazione, ma, non le ho ancora potute verificare), però avevano quasi tutte a che fare con puntatori tipo (*p) ma non ho trovato esempi con (&p), premetto che so poco di c, ma il primo dovrebbe essere il valore di una data variabile, il secondo l'indirizzi della stessa. Per JNI ci sono degli esempi?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da robyf1
    grossomodo sono riuscito ad "interfacciarmi" con alcune funzioni (queste ultime non mi danno errori di compilazione, ma, non le ho ancora potute verificare), però avevano quasi tutte a che fare con puntatori tipo (*p) ma non ho trovato esempi con (&p), premetto che so poco di c
    Si vede .... guarda che nel caso di &major, &minor stai passando a quella funzione l'indirizzo delle due variabili. SusiGetVersion avrà come parametri 2 puntatori .... appunto per ricevere gli indirizzi.
    Tutto qui.

    Originariamente inviato da robyf1
    JNI ci sono degli esempi?
    I puntatori e indirizzi stanno solo a livello nativo .... non li passi/restituisci certo al livello di Java.

    La tua classe Java potrebbe avere un metodo es.

    public static native Version getSusiVersion()

    Dove Version è un'altra tua classe che "modella" major+minor. Nella tua DLL invochi SusiGetVersion esattamente come hai mostrato all'inizio. Alla fine istanzi tramite le funzionalità di JNI un oggetto Version, imposti i campi e ritorni l'oggetto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    25
    mmmH mi servirebbe un esempio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.