Java は、JNI を介して C++ ダイナミック リンク ライブラリ (サードパーティ ライブラリ) を呼び出し、プロセス全体を実現します。 デモ

ステップ(アイデア)

1. スキャン デバイスなどの一部の機能をカプセル化する C++ ダイナミック リンク ライブラリを作成し、サードパーティ ライブラリとして使用します。 2. サードパーティ ライブラリを呼び出してさらにカプセル化する C++ ミドルウェア (本質的には DLL) を作成します
。サービスやロジックなどを追加
3. C++ ダイナミック リンク ライブラリ (サードパーティ ライブラリ) の関数を呼び出す Java プロジェクトを作成します

1. C++ ダイナミック リンク ライブラリ (DLL) を作成します。

1.1 新しいダイナミック リンク ライブラリを作成する

1. Visual Studio を開き、新しいプロジェクトを作成し、ダイナミック リンク ライブラリ (DLL) を選択して、[次へ] をクリックします。
ここに画像の説明を挿入します
2. プロジェクトの名前と場所を変更し、[作成] をクリックします。
ここに画像の説明を挿入します

1.2 ダイナミックリンクライブラリの設定

3. ソース ファイルを右クリックし、[追加]、[新しい項目] の順に選択します。
ここに画像の説明を挿入します
4. WindowsHidUsb という名前の C++ クラスを選択し、[追加] をクリックします。
ここに画像の説明を挿入します
5. pch.h、WindowsHidUsb.h、および 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. プロジェクトを右クリックし、「生成」をクリックします。
ここに画像の説明を挿入します

2. C++ミドルウェア(ダイナミックリンクライブラリ)の作成

2.1 ミドルウェアの作成

作成手順は上記と同じで、プロジェクト名をMtkHidUsbBridgeとして、MtkHidUsbBridgeという名前のcppファイルを追加します。

2.2ミドルウェアの設定

1. プロジェクトを右クリックし、「プロパティ」をクリックします。
ここに画像の説明を挿入します

2. VC++ ディレクトリ - インクルード ディレクトリ - 編集
ここに画像の説明を挿入します
3. [追加] をクリックして、include、include\win32、およびローカル Java jdk のディレクトリを追加します。
ここに画像の説明を挿入します
4. ヘッダー ファイルを右クリックし、前に作成した WindowsHidUsb.h ヘッダー ファイルをヘッダー ファイルに追加します。プロジェクト フォルダーの MtkHidUsbBridge.cpp ファイルと 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) WindowsHidUsb.h ヘッダー ファイル。相対パスを独自の相対パスに置き換えるだけです。

#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. プロジェクトを右クリックし、[生成] をクリックすると、次のようなディレクトリが生成されます。次の手順で使用するので、最初に覚えておいてください。
ここに画像の説明を挿入します

3.Java は C++ ダイナミック リンク ライブラリ (サードパーティ ライブラリ) を呼び出します

3.1 空のプロジェクトを新規作成(省略)

作成プロセスは、頭を使わずに(手を動かすだけで)次のようにするのと同じくらい簡単です。

3.2 Javaプロジェクトの設定

1. com.mtk.api.usb フォルダーで右クリックし、次のように新しい MtkUsbJNI.java クラスを作成します。

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

class MtkUsbJni {
    
    
    native int scanDevice();
}

2. dos ウィンドウを開き、Java プロジェクトの src ディレクトリを見つけて、アドレスバーに「cmd」と入力して Enter キーを押し、次のコマンドを入力します。

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

このうち、com.mtk.api.usb.MtkUsbJNI は、Java プロジェクト内の MtkUsbJNI クラスの実際のパッケージ パスです
ここに画像の説明を挿入します
3. 生成された com_mtk_api_usb_MtkUsbJni.h ヘッダー ファイルを MtkHidUsbBridge のヘッダー ファイル ディレクトリに追加し、
ヘッダー ファイルを右クリックします- 追加 - 既存の項目 - 見つかったら追加し、プロジェクトを再設定します (ヘッダー ファイルの格納ディレクトリを VC++ ディレクトリ - インクルード ディレクトリに追加します) 4. 生成された MtkHidUsbBridge.dll を Java プロジェクトのルート ディレクトリに追加し
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ます
5. com.mtk.api の .usb パッケージの下に、次の 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. 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. 上記で生成された 2 つのダイナミック リンク ライブラリ、MtkHidUsbBridge.dll と MtkHidUsb.dll を Java のルート ディレクトリにコピーし、右クリックして実行します。
ここに画像の説明を挿入します

4.ソースコード

ここをクリック

おすすめ

転載: blog.csdn.net/qq_52431815/article/details/131701586