記事ディレクトリ
ステップ(アイデア)
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 のルート ディレクトリにコピーし、右クリックして実行します。