JAVA调用C++的动态链接库

步骤一:

使用VC6.0搭建一个空白动态链接库项目,步骤如图,文件——》新建——》工程——》选择动态链接库,工程名自己随便填:

JAVA调用C++的动态链接库_第1张图片

项目目录很简单,一个头文件和一个源文件就行了,图片也有目录结构显示。

网上有很多博文都瞎几把写,又不给完整的代码,我很看不过眼,不知道那些人是不是滥竽充数,很让人生气。这里给大家提供完整的头文件和源文件代码,直接复制,改改文件名就能用了:

头文件MyDllTest.h:

// MyDllTest.h: interface for the MyDllTest class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MYDLLTEST_H__B55277E4_D66E_4AD0_AF2B_BA928916FD2F__INCLUDED_)
#define AFX_MYDLLTEST_H__B55277E4_D66E_4AD0_AF2B_BA928916FD2F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class MyDllTest  
{
public:
	MyDllTest();
	virtual ~MyDllTest();
	
//	extern "C" _declspec(dllexport) void Test(int a,int b);  
};
extern "C" _declspec(dllexport) int a();    //这一行是可以供外部调用的方法,亲测不要和普通方法一样放在花括号里,会跑不起来的
#endif // !defined(AFX_MYDLLTEST_H__B55277E4_D66E_4AD0_AF2B_BA928916FD2F__INCLUDED_)

源文件MyDllTest.cpp:

// MyDllTest.cpp: implementation of the MyDllTest class.
//
//////////////////////////////////////////////////////////////////////

#include "MyDllTest.h"
#include
using namespace std;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

MyDllTest::MyDllTest()
{

}

MyDllTest::~MyDllTest()
{

}
/*
int add(int a,int b)
{
   int C;
   C=a+b;
   return C;
}
extern "C" _declspec(dllexport) int Test(int a,int b)
{
    int C=add(a,b);
    cout<<"C="<

然后右键项目,选择右键菜单第一个“构建”:

JAVA调用C++的动态链接库_第2张图片

在项目的Debug文件夹中即可找到dll文件。

步骤二,把dll文件放在java项目的根目录中,记得要放在根目录,不要放在其他目录。

步骤三,下载jan.jar包,导入到项目库中, 我用的是jna-4.5.2.jar。

步骤四,编写java代码,完整代码如下:

package controllers;

import com.sun.jna.Native;
import com.sun.jna.Platform;
import com.sun.jna.win32.StdCallLibrary;

/**
 * Created by Administrator on 2019/9/3.
 */
public class JavaOperationDemo {

    public interface Dll extends StdCallLibrary {

        //        Dll INSTANCE = (Dll) Native.loadLibrary("Dll1", Dll.class);// 加载动态库文件方法1
        Dll INSTANCE = (Dll) Native.loadLibrary((Platform.isWindows() ? "DataTran" : "c"),
                Dll.class);
        public int initNetWork();// 动态库中调用的方法
    }

    public static void main(String[] args){
       JavaOperationDemo demo = new JavaOperationDemo();
       try{
           System.out.println("==****@@@@@@@@@@@@***$$$$$$$***@@@@@@@@@@****=="+Dll.INSTANCE.initNetWork());
       }catch(Exception e){
           e.printStackTrace();
       }

    }
}

试试跑起来看看吧!

你可能感兴趣的:(java)