JNA調用C++

前言

人生如逆旅,我亦是行人

背景

寫完C++,寫Java調用Demo

環境

VS2017、IDEA、JNA5.5

JNI(太複雜),JNative(最高版本1.4,只支持32位JDK1.7,踩坑)


一、準備DLL(Release X64位)

  C++生成DLL步驟不做介紹了,注意點:使用extern生成C語言庫,原因是C++編譯器會更改函數名
  

二、測試調用

將dll放在項目根目錄,並導入JNA的jar包

package qskernel;

import com.sun.jna.Library;
import com.sun.jna.Native;

public class QsKernel {

    /// \brief 加載dll,
    public interface CLibrary extends Library
    {
        CLibrary INSTANCE = (CLibrary) Native.load("dll名稱", CLibrary.class);
        //註冊dll的函數,名稱、參數對應
        String openFolderDialog();
    }
    
    public static void main(String[] args)
    {
        try
        { 
			String folderPath = CLibrary.INSTANCE.openFolderDialog();
            System.out.println(folderPath);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

注意
  1. 函數參數和返回參數對應,例如C++中的char*和Java中String對應
  2. 本文只是簡單Demo,涉及到複雜調用可查看官網(以及JNA下載
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章