(200分)Java如何调用C的动态链接库--求助ing?

ladybirds2008 2010-04-02 05:13:28
java 调用C的动态库
动态链接库名为testFile.dll,修改的函数为TestNFile

int __stdcall TestNFile(const char * OldSFile ,int NewSKey)
OldSFile 需要的业务文件
NewSKey 新业务
返回值,修改成功为1,不成功为0
int __stdcall TestNFile(const char * OldSFile,int NewSKey)
{
return 1;
}

请各位大侠指教啊。。给出个实例来。。第一调用c的动态库有点迷茫。。。望贴出代码。。重点注释说明,主要部分详细说明下。。。谢谢啦。。。
...全文
764 70 打赏 收藏 转发到动态 举报
写回复
用AI写文章
70 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenquan836 2011-07-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 so185582 的回复:]

上星期刚做了一个java调用dll得到系统内存的功能
public class Util
{
static{
System.loadLibrary("TESTDLL");
}

public static native long getMemory();
}

在别的类里调用Util.getMemory()就取到返回值了.
……
[/Quote]

如果不知道里面的方法,还有如果dll里有对象,怎么引用里dll里面的对象。请求帮助 。。。
Mars_Ma_OK 2010-04-07
  • 打赏
  • 举报
回复
唉,我只能算个帮顶的!!!!
ladybirds2008 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 61 楼 injuer 的回复:]

轻轻的问下楼主:

jna支持其他操作系统的本地动态库调用不?

比如:在unix下动态库是.so,在mac-os下动态库是.dylib这些基本是目前主流OS,在这些下面的DLL都能被连接和互相通信吗?

因为我查了下SUN的官网帮助,上面只是间断介绍了下JNA的用法和描述....
[/Quote]这个问题不错。JNI和JNA 技术上,我门是不用区分后缀名的,系统会自动匹配或是说自己区分扩展名是什么,比如xx.os和xx.dll。它只去在系统系找到xx 然后自己去辨认匹配os和dll,你说的‘连接和互相通信’不知是嘛意思,我想既然java模块间都可以互相建连,这个应该也是可以的。。
zjwilove4 2010-04-07
  • 打赏
  • 举报
回复
JNI实现吧。我们公司刚刚做了这个。动态调用dll实现特征验证
liboofsc 2010-04-07
  • 打赏
  • 举报
回复
楼主听我的没错,用jnative吧,非常好用的,以前一个项目我也考查了很久,最终终还是选择了jnative,
具体的资料可以在网上查查jnative相关的内容。
ladybirds2008 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 65 楼 injuer 的回复:]

引用 62 楼 ladybirds2008 的回复:
引用 61 楼 injuer 的回复:

轻轻的问下楼主:

jna支持其他操作系统的本地动态库调用不?

比如:在unix下动态库是.so,在mac-os下动态库是.dylib这些基本是目前主流OS,在这些下面的DLL都能被连接和互相通信吗?

因为我查了下SUN的官网帮助,上面只是间断介绍了下JNA的用法和描述....
……
[/Quote]这个倒是没有想过这么深,我的想法也只是猜测。我也是刚刚接触到。。也就是这2天才开始看关于其资料,不过我正在找问题方面的资料。。。大家研究着学习吧。。嘿嘿。。。不过这里有个关于java swing的应用你看下,我有点迷糊。。http://piscesky.javaeye.com/blog/281848
injuer 2010-04-07
  • 打赏
  • 举报
回复
轻轻的问下楼主:

jna支持其他操作系统的本地动态库调用不?

比如:在unix下动态库是.so,在mac-os下动态库是.dylib这些基本是目前主流OS,在这些下面的DLL都能被连接和互相通信吗?

因为我查了下SUN的官网帮助,上面只是间断介绍了下JNA的用法和描述....
injuer 2010-04-07
  • 打赏
  • 举报
回复
如果能!请楼主举个例子.....
injuer 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 62 楼 ladybirds2008 的回复:]
引用 61 楼 injuer 的回复:

轻轻的问下楼主:

jna支持其他操作系统的本地动态库调用不?

比如:在unix下动态库是.so,在mac-os下动态库是.dylib这些基本是目前主流OS,在这些下面的DLL都能被连接和互相通信吗?

因为我查了下SUN的官网帮助,上面只是间断介绍了下JNA的用法和描述....
这个问题不错。JNI和JNA 技术上,我门是不用区分后缀……
[/Quote]

楼主从后缀名的角度来考虑这个问题,我也赞同,但我们换个角度考虑,基于从本质上来说,jna是基于jni开发的一种更为便捷的访问DLL的技术,当目前从我所搜集的资料看,jna在任何文档中或应用场景看,它都侧重与WINDOWS平台的操作,而我因为考虑到OS系统之间通过后缀名可以推断系统内核本质不同,所以基于这个方面,我想知道,如果在内核不同的情况下,怎么有效的能加载DLL,到达互相交换信息,我指的连接互相通信,其就是OS能基于本质内核与JNA传递数据吗?因为,我们在实际应用中,基本的DLL库都是有针对性的,但OS只要不同了,那DLL也会变换,在这种情况下,jna能跨平台吗?
LuffySY 2010-04-07
  • 打赏
  • 举报
回复
继续帮顶 继续关注
ladybirds2008 2010-04-06
  • 打赏
  • 举报
回复

public interface CLibrary extends Library
{
CLibrary INSTANCE = (CLibrary)Native.loadLibrary((Platform.isWindows() ? "testFile" : "c"), CLibrary.class);
void TestNFile(String XX, Object...args);//这里我应该如何传参数啊。。是如何对应c中
// TestNFile函数的?是应该怎么写啊?
//int __stdcall TestNFile(const char * OldSFile,int NewSKey)
}

public static void main(String[] args)
{
CLibrary.INSTANCE.TestNFile("Hello, World\n");
//还有这里调用的时候又是怎么样传参数的啊?。。哪位大侠给个解释。。。
}
。。哪位大侠给个解释。。。
ladybirds2008 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 luozhangwen 的回复:]

用JNI吧 因为我偶们用的JNI..
[/Quote]JNI 第一次了解后就不想用它。。。因为他太麻烦啦。。感觉不利落。而且不直观。若一个人去看java代码,中间忽然发现有段c的代码,那感觉不会很好吧。容易造成视觉障碍。。。
luozhangwen 2010-04-06
  • 打赏
  • 举报
回复
用JNI吧 因为我偶们用的JNI..
取你猪头 2010-04-06
  • 打赏
  • 举报
回复
帮顶了。。。
amos1989 2010-04-06
  • 打赏
  • 举报
回复
好深奥的问题....... 从来不知道还有这种用法
ladybirds2008 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 ladybirds2008 的回复:]

Java code

public interface CLibrary extends Library
{
CLibrary INSTANCE = (CLibrary)Native.loadLibrary((Platform.isWindows() ? "testFile" : "c"), CLibrary.class);
void TestNFile……
[/Quote]
ps:我用的是JNA
ladybirds2008 2010-04-06
  • 打赏
  • 举报
回复

public interface CLibrary extends Library
{
CLibrary INSTANCE = (CLibrary)Native.loadLibrary((Platform.isWindows() ? "testFile" : "c"), CLibrary.class);
void TestNFile(String XX, Object...args);//这里我应该如何传参数啊。。是如何对应c中
TestNFile函数的?是应该怎么写啊?
//int __stdcall TestNFile(const char * OldSFile,int NewSKey)
}

public static void main(String[] args)
{
CLibrary.INSTANCE.TestNFile("Hello, World\n");
//还有这里调用的时候又是怎么样传参数的啊?。。哪位大侠给个解释。。。
}
gabriel80 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 ladybirds2008 的回复:]
JNI和JNA哪个比较好啊?。。。有高手给个详细说明解释,有点迷糊。。。。2天没有上网啦。。。
[/Quote]
给你个地址http://blog.csdn.net/shendl/archive/2008/12/24/3589676.aspx
好好研究下吧
fengqieer1986 2010-04-06
  • 打赏
  • 举报
回复
学习学习
ladybirds2008 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 colin_pxx 的回复:]

java中调用c(c++)写的dll文件的实现及步骤:

http://a3mao.javaeye.com/blog/97548
[/Quote]这个我看过啦 用JNI太麻烦啦 还要写一大堆 c的代码。我就想用JNA。。。。看似这个比较简单,但性能效率方面 JNA欠佳。。。我不知道如何是好。。。用JNA怎么才能提高效率的,或者哪位大侠告诉我 他们2个的主要区别在哪啊?
加载更多回复(50)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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