JAVA调用动态链接库(dll)

本文介绍了一种在Java环境下通过JNI调用Windows DLL的方法,包括定义Java接口、生成并实现JNI头文件、编译DLL及在Java中加载并调用的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

菜鸡爬坑 大神飞过
因为某个东西的keygen我只会在win下生成!! 所以只能出此下策!!
之前一直是android下用jni调用so文件,现在试下java在win平台下调用dll 首先还是老套路,直接在dll中弹出一个信息框具体流程如下:在Java中定义一个方法,在C++中实现这个方法,在方法内弹出信息框,然后再回到Java中进行调用。


首先在java中定义一个类 
package cn.ylca.dll;
public class DllEntity {
//本地方法
         public native void messagebox();
}


第二步 控制台到bin目录下
使用javah生成DllEntity 的头文件


生成文件内容如下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class cn_ylca_dll_DllEntity */

#ifndef _Included_cn_ylca_dll_DllEntity
#define _Included_cn_ylca_dll_DllEntity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     cn_ylca_dll_DllEntity
* Method:    messagebox
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_cn_ylca_dll_DllEntity_messagebox
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif



第三步新建一个dll的项目




然后把刚才生成的内容复制到cpp文件   到这里还需要一个jni.h头文件  到jdk目录下 include 文件中复制一份 
代码如下
// javadll.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                                         )
{
    return TRUE;
}
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class cn_ylca_dll_DllEntity */

#ifndef _Included_cn_ylca_dll_DllEntity
#define _Included_cn_ylca_dll_DllEntity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     cn_ylca_dll_DllEntity
* Method:    messagebox
* Signature: ()V
*/
        
JNIEXPORT void JNICALL Java_cn_ylca_dll_DllEntity_messagebox
(JNIEnv *env, jobject obj){//补上参数名字

        //到这里就不许要再说什么的了把! 
        MessageBox(NULL, "测试!", "demo", 0);
}

#ifdef __cplusplus
}
#endif
#endif



第四步就是如何在java中使用了  创建一个测试类来调用



package cn.ylca.calldll;

import cn.ylca.dll.DllEntity;

public class Test {
        public static void main(String[] args) {
                //加载指定路径的dll
                System.load("D://javadll//Debug//javadll.dll");
                //创建本地方法对象
                DllEntity dllEntity = new DllEntity();
                //调用方法
                dllEntity.messagebox();
        }
   
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值