惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
B
Blog
博客园 - Franky
H
Help Net Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
云风的 BLOG
云风的 BLOG
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
宝玉的分享
宝玉的分享
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
V
V2EX
Martin Fowler
Martin Fowler
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队

博客园 - Aimd

EPS图片转换 & 共享一个Excel宏,用于画Latex表格 Latex从零到开始使用 Eclipse下配置及使用Tomcat 6.0数据库连接池连接sqlserver2000 强制删除文件夹 SWT应用程序打包成jar过程 解决firefox频繁询问代理服务器用户名和密码问题 SQL server 2005 不能重新安装解决及ADO连接事例代码 SQL server 2005 远程连接问题及解决 家乡回长春路上拍的照片 blog的三种人 右键打不开磁盘又出新花样 允许SWT Table的Tableitem多行显示 今天遇到一个geotools(GIS)和Eclipse合作的巨恶问题 实现模型间的多线连接 慎用EMF Ecore文件的名字 数据压缩方法 BIRT插件的使用 RCP的布局得两个细节 RCP导出注意事项
用jni实现java使用dll
Aimd · 2006-08-18 · via 博客园 - Aimd

不要幻想一切都那么完美,使用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部分。