zoukankan
html css js c++ java
在Visual C++中编译JNI DLL
在Java中调用C语言的DLL的一个方式就是
JNI
( Java Native Interface)。但是,在VC++ 6.0中编译JNI DLL遇到一个小问题。例如: Java定义如下:
public
class
NTPortJava
{
//
Returns a value indicates whether the application is running under Windows NT/2000 system.
public
native
static
boolean IsWinNT();
}
使用Javah可以生成如下的函数定义:
/**/
/*
* Class: NTPortJava_NTPortJava
* Method: IsWinNT
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_NTPortJava_NTPortJava_IsWinNT
(JNIEnv
*
, jclass);
如果编写好Java_NTPortJava_NTPortJava_IsWinNT进行编译链接也可以正常生成DLL,但是使用
Dependency Walker
可以发现DLL中导出的函数不是Java_NTPortJava_NTPortJava_IsWinNT,而是
_Java_NTPortJava_NTPortJava_IsWinNT@0
。出现这个问题的原因是JNIEXPORT在jnimd.h 的定义:
#define
JNIEXPORT __declspec(dllexport)
Visual C++对于__declspec(dllexport)的处理就是在导出函数的前后添加修饰符号。解决问题的办法很简单,只需要
建立一个.def文件
就可以了:
LIBRARY NTPortJava
EXPORTS
Java_NTPortJava_NTPortJava_IsWinNT
这样编译链接后产生的DLL就满足要求了。
查看全文
相关阅读:
EL表达式_1
Servlet2
Servlet1
安装Tomcat
Java日期时间3
SpringCloud之Ribbon负载均衡
SpringCloud之Eureka注册中心
存储过程—增减字段
880. Decoded String at Index
977. Squares of a Sorted Array
原文地址:https://www.cnblogs.com/zealsoft/p/221329.html
最新文章
cf 1366D Two Divisors
cf1368D AND, OR and square sum
cf1288e Messenger Simulator
cf1388D Captain Flint and Treasure
linux批量将文件编码由gbk转成utf8
x86学习
mysys2
基于k8s安装TiDB4.0集群
CMD命令(不常用)
CMD命令
热门文章
java工程打包(方式二)
java工程打包(方式一)
笔记本键盘输入j显示1
iText实现Java生成PDF文件文档
iText实现Java生成PDF文件
加分项
课程评价
JSTL标签库_2
JSTL标签库_1
EL表达式_2
Copyright © 2011-2022 走看看