Java llama a la biblioteca de enlaces dinámicos C ++ (biblioteca de terceros) a través de JNI para realizar todo el proceso Demostración

Pasos (ideas)

1. Cree una biblioteca de enlaces dinámicos de C++ para encapsular algunas funciones, como dispositivos de escaneo, y utilícela como una biblioteca de terceros 2.
Cree un middleware de C++ (esencialmente también una DLL) para llamar y encapsular aún más bibliotecas de terceros y agregue algunos servicios, lógica, etc.
3. Cree un proyecto Java para llamar a las funciones de la biblioteca de enlaces dinámicos C ++ (biblioteca de terceros)

1. Cree una biblioteca de vínculos dinámicos (DLL) de C++

1.1 Crear una nueva biblioteca de enlaces dinámicos

1. Abra Visual Studio, cree un nuevo proyecto, seleccione la biblioteca de vínculos dinámicos (DLL) y haga clic en Siguiente.
Insertar descripción de la imagen aquí
2. Modifique el nombre y la ubicación del proyecto y haga clic en Crear.
Insertar descripción de la imagen aquí

1.2 Configurar la biblioteca de enlaces dinámicos

3. Haga clic derecho en el archivo fuente y seleccione Agregar->Nuevo elemento
Insertar descripción de la imagen aquí
4. Seleccione la clase C++ denominada WindowsHidUsb y haga clic en Agregar
Insertar descripción de la imagen aquí
5. Escriba los archivos pch.h, WindowsHidUsb.h y WindowsHidUsb.cpp
pch.h

#ifndef PCH_H
#define PCH_H

// 添加要在此处预编译的标头
#include "framework.h"
#define API_DLL  _declspec(dllexport)

#endif //PCH_H

WindowsHidUsb.h

#pragma once
#include "pch.h"

API_DLL int scanDevice();

WindowsHidUsb.cpp

#include "WindowsHidUsb.h"
#include "pch.h"

API_DLL int scanDevice() {
    
    
	return 2;
}

6. Haga clic derecho en el proyecto y haga clic en Generar.
Insertar descripción de la imagen aquí

2. Cree middleware C ++ (biblioteca de enlaces dinámicos)

2.1 Crear middleware

Los pasos de creación son los mismos que los anteriores. El nombre del proyecto es MtkHidUsbBridge. Agregue un archivo cpp llamado MtkHidUsbBridge.

2.2Configurar middleware

1. Haga clic derecho en el proyecto y haga clic en Propiedades.
Insertar descripción de la imagen aquí

2. Directorio VC++ - Incluir directorio - Editar
Insertar descripción de la imagen aquí
3. Haga clic en Agregar para agregar include, include\win32 y el directorio del java jdk local
Insertar descripción de la imagen aquí
4. Haga clic derecho en el archivo de encabezado y agregue el archivo de encabezado WindowsHidUsb.h escrito antes al archivo de encabezado de la carpeta del proyecto y escriba el archivo MtkHidUsbBridge.cpp y el archivo de encabezado WindowsHidUsb.h
(1) MtkHidUsbBridge.cpp

#include "pch.h"
#include "com_mtk_api_usb_MtkUsbJni.h"
#include "WindowsHidUsb.h"

JNIEXPORT jint JNICALL Java_com_mtk_api_usb_MtkUsbJni_scanDevice
(JNIEnv*, jobject) {
    
    
	return scanDevice();
}

(2) Archivo de encabezado WindowsHidUsb.h, simplemente reemplace la ruta relativa con su propia ruta relativa

#pragma once

#if  defined(WIN32)
 #if defined(DEBUG)
#pragma comment(lib,"../../MtkHidUsb/x64/Debug/MtkHidUsb.lib")
#pragma message("完成与MtkHidUsb.lib的连接")
#else
#pragma comment(lib,"../../MtkHidUsb/x64/Release/MtkHidUsb.lib")
#pragma message("完成与MtkHidUsb.dll的连接")
#endif
#endif //  defined(WIN32)


 int scanDevice();


5. Haga clic derecho en el proyecto y haga clic en Generar. El directorio generado es el siguiente. Recuérdelo primero, se utilizará en el siguiente paso.
Insertar descripción de la imagen aquí

3.Java llama a la biblioteca de enlaces dinámicos de C ++ (biblioteca de terceros)

3.1 Crear un nuevo proyecto vacío (omitido)

El proceso de creación es tan sencillo como seguirlo sin cerebro (solo ten manos)

3.2 Configurar proyecto Java

1. En la carpeta com.mtk.api.usb, haga clic derecho para crear una nueva clase MtkUsbJNI.java, de la siguiente manera

package com.mtk.api.usb;//与自己的文件夹结构对应

class MtkUsbJni {
    
    
    native int scanDevice();
}

2. Abra la ventana de DOS, busque el directorio src del proyecto java, ingrese cmd en la barra de direcciones y presione Entrar, ingrese el siguiente comando

javah -jni -encoding UTF-8 com.mtk.api.usb.MtkUsbJNI

Entre ellos, com.mtk.api.usb.MtkUsbJNI es la ruta real del paquete de la clase MtkUsbJNI en su proyecto Java
Insertar descripción de la imagen aquí
3. Agregue el archivo de encabezado com_mtk_api_usb_MtkUsbJni.h generado al directorio del archivo de encabezado de MtkHidUsbBridge y
haga clic con el botón derecho en el archivo de encabezado. - Agregar - Elemento existente - Agréguelo después de encontrarlo y configure el proyecto nuevamente (agregue el directorio de almacenamiento del archivo de encabezado al directorio de inclusión del directorio VC ++) 4. Agregue el MtkHidUsbBridge.dll generado al directorio
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
raíz del proyecto Java
5. En com.mtk.api En el paquete .usb, cree la siguiente clase MtkUsb

package com.mtk.api.usb;


public class MtkUsb {
    
    
    private static final MtkUsb mtkUsb = new MtkUsb();
    public static MtkUsb getInstance(){
    
    
        return mtkUsb;
    }
    private static final MtkUsbJni mtkUsbJni = new MtkUsbJni();
    public int scanDevice(){
    
    
        return mtkUsbJni.scanDevice();
    }
}

6. Cree una nueva clase de prueba en el paquete com.mtk.test

package com.mtk.test;
import com.mtk.api.usb.MtkUsb;

public class MtkHidUsbTest {
    
    
    public static void main(String[] args) {
    
    
        System.loadLibrary("MtkHidUsb");
        System.loadLibrary("MtkHidUsbBridge");
        System.out.println("Device Count=" + MtkUsb.getInstance().scanDevice());
    }
}

6. Copie las dos bibliotecas de enlaces dinámicos generadas anteriormente, MtkHidUsbBridge.dll y MtkHidUsb.dll al directorio raíz de Java, haga clic derecho y ejecute.
Insertar descripción de la imagen aquí

4.Código fuente

haga clic aquí

Supongo que te gusta

Origin blog.csdn.net/qq_52431815/article/details/131701586
Recomendado
Clasificación