用jni实现java使用dll

不要幻想一切都那么完美,使用jni调C++功能,也要之前用java声明出预调用的函数,然后用javah和生成的class文件生成一个.h文件,我们做的是针对这个.h文件,实现.cpp。

1:写一个Java类,在这个类中包含了需要调用的本地方法的描述。
public class Main {
    
static
        System.loadLibrary(
"TestDLL"); 
    }
    
    
public native int get();
    
    
    
public static void main(String[] args) {
        Main m 
= new Main();
        System.out.println(m.get);
    }
}

2:编译,然后命令行下使用命令javah -jni (-classpath . )Main,此时会在当前目录下产生一个Main.h文件
3:使用VC来编写本地方法的实现函数,最后编译成.dll文件。过程如下: 
        1) 选择new->projects(选择Win32 Dynamic-Link Library)->OK->An ampty DLL project->Finish。 
        2) 选择Tools->Options->Directories(添加目录..\J2SDK\INCLUDE和..\J2SDK\INCLUDE\WIN32)。
        3) 将Main.h添加到工程。 
        4) 添加源文件Main.cpp,内容如下:
#include "Main.h"

JNIEXPORT jint JNICALL Java_Main_get(JNIEnv 
*, jobject)
{
   
return 1;
}

        5) 编译生成TestDLL.dll文件。并将这个.dll文件拷贝到java工程的目录中。
4:运行java工程就可以了。

问题:dll中如果使用了dynamic_cast,就必须把工程的rtti打开,而且dll编译为debug版本,因为rtti要记录每个类的一些信息。否则不能使用这个dll。

注意: 整个过程要保证jdk的版本统一,如vc环境下和javah部分。

转载于:https://www.cnblogs.com/Aimd/archive/2006/08/18/480213.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值