国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java調(diào)用dll文件

Jeff / 3458人閱讀

摘要:目錄創(chuàng)建創(chuàng)建項目與工具項目與工具步驟與代碼步驟與代碼使用調(diào)用使用調(diào)用項目與工具項目與工具步驟與代碼步驟與代碼實際效果實際效果參考鏈接參考鏈接創(chuàng)建項目與工具步驟與代碼使用創(chuàng)建動態(tài)鏈接庫項目設(shè)置項目名與項目

目錄

1 C++創(chuàng)建dll

1.1 項目與工具

1.2 步驟與代碼

2 Java使用JNA調(diào)用dll

2.1 項目與工具

2.2 步驟與代碼

3 實際效果

4 參考鏈接


1 C++創(chuàng)建dll

1.1 項目與工具

Visual Studio 2019

1.2 步驟與代碼

①使用VS創(chuàng)建動態(tài)鏈接庫(DLL)項目

②設(shè)置項目名與項目地址

創(chuàng)建好的效果如下:

③創(chuàng)建choosefiles.cpp源文件和choosefiles.h頭文件?

?

?④choosefiles.h

#ifdef CHOOSEFILES_EXPORTS#define CHOOSEFILES_API __declspec(dllexport)#else#define CHOOSEFILES_API __declspec(dllimport)#endifextern "C" CHOOSEFILES_API char* chooseFiles();

?⑤choosefiles.cpp

#include "pch.h"#include "framework.h"#include "choosefiles.h"#include #include #include #include using namespace std;/*TCHAR*轉(zhuǎn)char**/char* LPWSTR2LPSTR(LPWSTR lpwszStrIn){    LPSTR pszOut = NULL;    if (lpwszStrIn != NULL) {        int nInputStrLen = wcslen(lpwszStrIn);        int nOutputStrLen = WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;        pszOut = new char[nOutputStrLen];        if (pszOut != NULL) {            memset(pszOut, 0x00, nOutputStrLen);            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);        }    }    return  pszOut;}CHOOSEFILES_API char* chooseFiles() {    OPENFILENAME ofn;    TCHAR szOpenFileNames[80 * MAX_PATH] = { 0 };    TCHAR szPath[MAX_PATH];    TCHAR szFileName[80 * MAX_PATH];    int nLen = 0;    TCHAR* p = NULL;    ZeroMemory(&ofn, sizeof(ofn));    // 結(jié)構(gòu)體大小    ofn.lStructSize = sizeof(ofn);    // 擁有著窗口句柄    ofn.hwndOwner = NULL;    // 接收返回的文件名,注意第一個字符需要為NULL    ofn.lpstrFile = szOpenFileNames;    // 緩沖區(qū)長度    ofn.nMaxFile = sizeof(szOpenFileNames);    // _T可替換為TEXT,使用_T需要引tchar.h    ofn.lpstrFile[0] = _T("/0");    // 設(shè)置過濾    ofn.lpstrFilter = _T("All/0*.*/0.mp4/0*.mp4/0.avi/0*.avi/0.mkv/0*.mkv/0.rmvb/0*.rmvb/0.f4v/0*.f4v/0.flv/0*.flv/0.m4v/0*.m4v/0.mpg/0*.mpg/0/0");    // 過濾器索引    ofn.nFilterIndex = 1;    // 窗口標題    ofn.lpstrTitle = _T("請選擇視頻");    // 文件必須存在、允許多選、隱藏只讀選項、對話框使用資源管理器風(fēng)格的用戶界面    // 官方文檔:https://docs.microsoft.com/en-us/windows/win32/api/commdlg/ns-commdlg-openfilenamea    ofn.Flags = OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_EXPLORER;    // 定義字符串,用于拼接所選的所有文件的完整路徑    string str = "***";    // 如果打開文件失敗,則不操作;打開成功才操作    if (GetOpenFileName(&ofn)) {        // 把第一個文件名前的復(fù)制到szPath,即:          // 如果只選了一個文件,就復(fù)制到最后一個"/"          // 如果選了多個文件,就復(fù)制到第一個NULL字符          lstrcpyn(szPath, szOpenFileNames, ofn.nFileOffset);        // 當只選了一個文件時,下面這個NULL字符是必需的.          // 這里不區(qū)別對待選了一個和多個文件的情況        szPath[ofn.nFileOffset] = "/0";        nLen = lstrlen(szPath);        // 如果選了多個文件,則必須加上"http://"          if (szPath[nLen - 1] != "http://") {            lstrcat(szPath, _T("http://"));        }        // 把指針移到第一個文件          p = szOpenFileNames + ofn.nFileOffset;        // 對szFileName進行清零        ZeroMemory(szFileName, sizeof(szFileName));        while (*p) {            // 讀取文件名            string fileName = LPWSTR2LPSTR(p);            // 讀取文件所在文件夾路徑            string filePath = LPWSTR2LPSTR(szPath);            // 拼接文件完整路徑            string completePath = filePath + fileName;            // 拼接字符串            str += completePath + "***";            //移至下一個文件            p += lstrlen(p) + 1;        }    }    // 將string轉(zhuǎn)為char*    char* strc = new char[strlen(str.c_str()) + 1];    const char* cc = str.c_str();    strcpy_s(strc, str.size() + 1, cc);    return strc;}

?⑥改成64位程序(由于我使用的是64位的jdk,所以需要生成64位的dll)

?⑦生成解決方案

生成成功提示如下:

dll文件:

2 Java使用JNA調(diào)用dll

2.1 項目與工具

idea、maven(選擇maven-archetype-quickstart骨架)、Java8、JNA

2.2 步驟與代碼

①創(chuàng)建好項目之后,創(chuàng)建resources文件夾,并將dll文件復(fù)制進去

②設(shè)置項目資源文件夾

設(shè)置好后結(jié)果如下:

③添加jna依賴并刷新maven

    net.java.dev.jna    jna    5.5.0?

④創(chuàng)建DLL接口

package cxzgwing;import com.sun.jna.Library;import com.sun.jna.Native;public interface DLL extends Library {    DLL dll = Native.load("choosefiles", DLL.class);    String chooseFiles();}

⑤調(diào)用

package cxzgwing;public class App {    public static void main(String[] args) {        System.setProperty("jna.encoding", "GBK");        System.out.println(DLL.dll.chooseFiles());    }}

3 實際效果

若點擊取消,則輸出三個星號(***):

?可選擇顯示的文件類型:

?

4 參考鏈接

[1]?Aimls.Java使用JNA調(diào)用C/C++動態(tài)鏈接庫dll.2019-07-26 14:44:22

Java使用JNA調(diào)用C/C++動態(tài)鏈接庫dll_嗶哩嗶哩_bilibili

[2]?晨曦之光Wing.C++打開文件選擇框多選文件.2021-10-09 00:03:40

C++打開文件選擇框多選文件_晨曦之光Wing的博客-CSDN博客

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/123076.html

相關(guān)文章

  • JavaWeb開發(fā)利用JNI調(diào)用C++代碼生成的dll進行圖像二值化處理并保存

    使用JNI進行Java與C/C++語言混合編程----在Java中調(diào)用C/C++生成的DLL動態(tài)鏈接庫 JNI是Java Native Interface的英文縮寫, 中文翻譯為本地調(diào)用, 自從Java 1.1開始就成為了Java標準的一部分.Java調(diào)用C/C++大概有這樣幾個步驟 編寫帶有native方法的Java類, 使用javac工具編譯Java類 使用javah來生成與native方法...

    cheukyin 評論0 收藏0
  • java如何獲取hdd序列號

    摘要:序在里頭如何獲取硬盤的序列號呢,這里涉及了跨平臺的問題,不同的操作系統(tǒng)的查看命令不一樣,那么里頭如何去適配呢。這里使用了這個項目來獲取。使用的是的方式而不是的形式來進行本地調(diào)用的。獲取方法,,,和之間的區(qū)別是什么,它們的調(diào)用效率怎么排名 序 在java里頭如何獲取硬盤的序列號呢,這里涉及了跨平臺的問題,不同的操作系統(tǒng)的查看命令不一樣,那么java里頭如何去適配呢。這里使用了oshi這個...

    jzman 評論0 收藏0
  • 初識 JNI

    摘要:初識本地接口概述是用于和本地代碼進行交互操作的。針對的是語言,而不是。當然,最初也有運行的比較慢的原因,但隨著的不斷發(fā)展,編寫的代碼有時已經(jīng)不遜于一些的代碼了。聲明通過關(guān)鍵字標識,提醒編譯器該方法在外部定義。 初識 JNI JNI, Java Native Interface(Java本地接口). 概述 JNI 是用于和本地 C 代碼進行交互操作的API。實際上可以通過許多語言編寫,如...

    chavesgu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<