急!!JAVA调用DLL问题

zongjianh 2008-03-03 05:24:06
前几天,公司的产品是用C++做的,是C/S结构的,让我把他作成B/S结构的去控制,函数库都给我门了,我用JAVA怎么样去调,用JNI吗?哪位有相关资料指点一下啊,谢谢啊
...全文
88 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanjun_xf 2008-03-04
  • 打赏
  • 举报
回复
没有整过,学习哈
zzkk_1980 2008-03-04
  • 打赏
  • 举报
回复
用JNI技术从Java应用中调用C程序库,大致需要完成以下步骤:

一、 编写调用C程序库的Java应用程序。例如:NativeSample.java
二、 编译该Java应用程序。例如:javac NativeSample.java
三、 生成C程序头文件。例如:javah –jni NativeSample
四、 根据头文件提供的接口,编写C程序文件。例如:NativeSample.c
五、 编译生成C动态库。例如:NativeSample.dll
六、 将C动态库放置于Java应用程序的类路径下,以便Java应用程序运行时可以调用。

下面是我实验时的相关文件及源码:
1、 调用C动态库的Java应用程序文件:NativeSample.java
/**
* @author hope
*
*/
public class NativeSample {
static {
System.loadLibrary("NativeSample");// 载入所调用的C动态库
}

/**
* 从Java应用程序中将参数传递到C动态库的函数中
*
* @param s
* @param i
* @param b
*/
private native void showParams(String s, int i, boolean b);

public void showParam(String s, int i, boolean b) {
showParams(s, i, b);
}

/**
* Java应用程序中处理C动态库函数的返回值
*
* @param a
* @param b
* @return
*/
private native int returnData(int a, int b);

public int showReturnData(int a, int b) {
return returnData(a, b);
}
}
2、 生成的C程序头文件:NativeSample.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class NativeSample */

#ifndef _Included_NativeSample
#define _Included_NativeSample
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: NativeSample
* Method: showParams
* Signature: (Ljava/lang/String;IZ)V
*/
JNIEXPORT void JNICALL Java_NativeSample_showParams
(JNIEnv *, jobject, jstring, jint, jboolean);

/*
* Class: NativeSample
* Method: returnData
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_NativeSample_returnData
(JNIEnv *, jobject, jint, jint);

#ifdef __cplusplus
}
#endif
#endif
3、 C动态库程序文件:NativeSample.c
#include <stdio.h>
#include "NativeSample.h"
JNIEXPORT void JNICALL Java_NativeSample_showParams
(JNIEnv *env, jobject obj, jstring s, jint i, jboolean b)
{
const char* szStr = (*env)->GetStringUTFChars( env, s, 0 );
printf( "String = [%s]\n", szStr );
printf( "int = %d\n", i );
printf( "boolean = %s\n", (b==JNI_TRUE ? "true" : "false") );
(*env)->ReleaseStringUTFChars( env, s, szStr );
}

JNIEXPORT jint JNICALL Java_NativeSample_returnData
(JNIEnv *env, jobject obj, jint a, jint b)
{
int rtn = (int)(a+b);
return (jint)rtn;
}

注意事项:
调用的接口需要事先定义好,最好是在Java程序中定义符合Java规范的接口,然后由Java的命令行生成相应的C程序头文件,然后C动态库的函数命名就以此头文件中的函数声明为准,进行设计与编码,最后要生成相应的*.DLL文件(若要在Linux下调用,则要生成相应的*.SO文件)。
lilyls 2008-03-04
  • 打赏
  • 举报
回复
您好:
JAVA急聘--某英国通讯社北京研发中心.待遇从优!

1. Web application engineer / Front End Engineer
要求:精通JavaJSP,J2EE,Html,XML,CSS,Apache,Tomcat
流利的英语沟通能力。
有兴趣请联系 mail: Lily@ipichina.com
msn: lishuangwinwin@hotmail.com

joejoe1991 2008-03-03
  • 打赏
  • 举报
回复
http://www.baidu.com.cn/s?ct=0&ie=gb2312&bs=java+com+bridge&sr=&z=&cl=3&f=8&wd=jacob+%B5%F7%D3%C3dll
BAIDU的。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧