Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Java JNI

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    40

    Java JNI

    Salve a tutti,
    ho un problemi nell'eseguire un semplice programma che utilizza Java JNI. Voglio lanciare un metodo C++ utilizzando Java.
    L'errore è java.lang.UnsatisfiedLinkError: Test1.inDll()V
    at Test1.inDll(Native Method)
    at Test1.main(Test1.java:11)
    Allego codice Java
    codice:
    class Test1
    {
        static
        {
            System.loadLibrary("TestDll");
        }
        public static void main(String ar[])
        {
            System.out.println("Hello world from Java");
            Test1 t=new Test1();
            t.inDll();
        }
        public native void inDll();
    }
    Qui il codice generato con javah -jni Test1 ovvero Test1.h
    codice:
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class Test1 */
    
    #ifndef _Included_Test1
    #define _Included_Test1
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     Test1
     * Method:    inDll
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_Test1_inDll (JNIEnv *, jobject);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    e infine l'header file che include quello precedente
    codice:
    // TestDll.h : file di intestazione principale per la DLL TestDll
    //
    
    #pragma once
    
    #ifndef __AFXWIN_H__
    	#error "inclusione di 'stdafx.h' del file corrente per PCH"
    #endif
    
    #include "resource.h"		// simboli principali
    #include "Test1.h"
    
    // CTestDllApp
    // Vedere TestDll.cpp per l'implementazione di questa classe
    //
    
    class CTestDllApp : public CWinApp
    {
    public:
    	CTestDllApp();
    
    // Override
    public:
    	virtual BOOL InitInstance();
    
    	DECLARE_MESSAGE_MAP()
    };
    JNIEXPORT void JNICALL Java_Test1_inDll(JNIEnv *env, jobject obj)
    {
    	printf("Hello word from C++");
        AfxMessageBox(_T("Hello World from dll"));
    };

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Domanda banale... hai compilato la libreria C++, vero?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    40
    Si se ti riferisci alla libreria dinamica dll cmq ho capito che il problema stava nel fatto che utilizzavo windows 7 x64 quindi ho formattato e installato la x86... java (sia x86 che x64) ha dei problemi a gestire le dll contenute in System32... Ora sembra che abbia risolto... se ne sai di + illuminami... Grazie per la risposta...

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non ho mai riscontrato problemi con le librerie in system32 su WinXP (x86); Win7, fin che posso, lo evito come la peste.

    Per evitare qualunque tipo di problema, ad ogni modo, io generalmente le DLL le inserisco nella stessa directory del programma (del JAR).

    Tieni presente che la ricerca delle librerie avviene su tutte le directory specificate nella System Property "java.library.path", che può essere settata all'avvio dell'applicazione con l'opzione -D:

    codice:
    java -Djava.library.path=percorso/alle/dll ApplicazioneJava

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.