jni c java互相调用_通过JNI实现Java和C++的相互调用

评论

# re: 通过JNI实现Java和C++的相互调用

2008-07-29 14:14

Always BaNg.

不错,把字符转换也一并讲了吧,比如UTF-8的处理,USC-2与MBCS转换等。  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用[未登录]

2008-07-29 14:17

role0523

你是指Java和C++之间的字符转换?

目前还没有研究过字符转换。

回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2008-07-31 23:58

coldsummer

如果是现成的dll呢?比如某硬件提供的开发dll开发包,我如何调用?  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用[未登录]

2008-08-01 00:05

role0523

@coldsummer

由于JAVA调用C++需要一定的格式,比如在JAVA中声明native方法,然后通过javah生成一个头文件,然后写cpp文件,但必须实现这个头文件中声明的JNIEXPORT方法。这些方法是Java调用C++的入口。所以在这些方法内部填写对你的DLL的调用即可。  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2008-08-26 17:14

lfking

你的这个JAVA调用C++的例子,我试了一整天,没试明白!~~

在最后编译成DLL文件时老是报错,不知道是怎么回事!~~~

错误代码如下:请你帮分析一下!谢谢!~

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(5) : error C2144: syntax error : 'void' should be preceded by ';'

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(5) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(5) : error C2146: syntax error : missing ';' before identifier 'Java_org_druze_test_TestNative_sayHello'

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(5) : error C2182: 'JNICALL' : illegal use of type 'void'

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(5) : error C2065: 'JNIEnv' : undeclared identifier

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(5) : error C2065: 'env' : undeclared identifier

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(5) : error C2065: 'jobject' : undeclared identifier

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(5) : error C2146: syntax error : missing ')' before identifier 'obj'

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(5) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(5) : error C2078: too many initializers

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(5) : error C2059: syntax error : ')'

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(6) : error C2143: syntax error : missing ';' before '{'

c:\documents and settings\william\my documents\visual studio 2005\projects\nativecode\nativecode\source.cpp(6) : error C2447: '{' : missing function header (old-style formal list?)

Generating Code...

生成日志保存在“file://c:\Documents and Settings\william\My Documents\Visual Studio 2005\Projects\NativeCode\NativeCode\Debug\BuildLog.htm”

NativeCode - 13 个错误,0 个警告

========== 全部重新生成: 0 已成功, 1 已失败, 0 已跳过 ==========

回复  更多评论

# re: 通过JNI实现Java和C++的相互调用[未登录]

2008-08-26 17:38

role0523

你没有指定jni.h,jni_md.h的include path,以及 jvm.dll的路径,具体参考文章后半部分  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2008-08-27 10:24

lfking

你说要指定jni.h 和 jni_md.h的include path 这个我都做了,就是少做一个JVM.DLL的路径,试过了,还是一样的错误!~

我做的是JAVA 连接 C++ 需要做这个JVM.DLL的路径吗?  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用[未登录]

2008-08-27 10:46

role0523

sorry, jvm.dll不用指定,因为我们这里不需要它。

这样好了,你把org_druze_test_TestNative.h和jni.h复制到source.cpp相同的目录下,将#include 修改为#include "jni.h" 试试看。

你的问题是jni.h的头文件没有在头文件的搜索路径当中。  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2008-08-27 12:01

lfking

我按照你上面写的步聚建立一个WIN32的工程,建好以后,会自动建立一个stdafx.h的头文件和stdafx.cpp文件!然后运行source.cpp的时候提示错误说必须要用stdafx.h这个头文件,加上去以后就出现这些错误了!

唉!~把jni.h放到source.cpp同一个目录下了,还是不行!~~

我留个QQ号给你吧,Q上聊!47145748!

你这BOLG上面不能发图片!

回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2008-08-27 12:04

lfking

vc以前从来没接触过,只是听说过!所以用起来有点愚纯!~~抱歉!~~  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用[未登录]

2008-08-27 15:12

role0523

你把stdafx.h的头文件和stdafx.cpp删除掉吧  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2008-08-28 10:31

lfking

无语了都.....

如果把stdafx.h和stdafx.cpp删除的话,会提示错误,说没有加载stdafx.h文件。

大哥,这个例子你试过没啊??是否成功了?你那个版本的VC??我是用VC2005做的!  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用[未登录]

2008-08-28 11:00

role0523

就如我文中所说,我用的VS2008,VC6,codeBlocks.我没搞定,不会写东西的。你的问题在于你对C++的编译器不是很熟悉,这我帮不了你。

BTW:如果把stdafx.h和stdafx.cpp删除的话,会提示错误,说没有加载stdafx.h文件。

那是你的某个地方#include了这个文件,OK?  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2008-08-28 14:53

lfking

7.编译,生成NativeCode.dll,并将其copy到环境变量PATH的路径下。

10.注意NativeCode.dll必须放置在java命令能访问的路径中。

这个不是很了解。能不能在说的具体点!

我是把NativeCode.dll放在与TestNative.java文件同一个目录下!   回复  更多评论

# re: 通过JNI实现Java和C++的相互调用[未登录]

2008-08-28 14:58

role0523

NativeCode.dll是由java.exe->jvm.dll->NativeCode.dll这样调用的。你把NativeCode.dll放到与java.exe同目录下,OK?

回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2009-05-21 18:10

Necho

完全按照楼主的做法结果确报这个错误,请楼主帮我看下吧

First-chance exception at 0x00411a20 in NativeCode2.exe: 0xC0000005: Access violation reading location 0x00000000.

Unhandled exception at 0x00411a20 in NativeCode2.exe: 0xC0000005: Access violation reading location 0x00000000.  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2009-05-21 18:21

Necho

补充一下 应该就是不能findclass  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2009-05-21 18:24

Necho

如果可以的话 请加我MSN:necho_leco@yhotmail.com

或者QQ :55128128

想向你请教,谢谢~!   回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2009-05-22 10:19

Necho

测试成功了 感谢LZ提供这么详细的说明 谢谢~~!!  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用[未登录]

2009-09-04 14:43

阿飞

楼主,请问下:我在VC6。0控制台下可以加载JAVA虚拟机了,为什么到了VC6.0的MFC下用同样的方法加载不了(编译不报错,但是调试的时候通不过),盼回复,谢谢!  回复  更多评论

# re: 通過JNI實現Java和C++的相互調用[未登录]

2009-12-18 13:40

sunny

樓主:

請問我在編譯C++時,出現這個錯誤訊息:

error C2065: 'JNI_VERSION_1_6' : undeclared identifier

我使用的是JDK1.6  回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2009-12-18 23:39

nobody

@sunny 看看这个声明在哪个头文件里面,把它include进来

回复  更多评论

# re: 通过JNI实现Java和C++的相互调用

2010-01-09 11:52

next

@lfking

朋友,这个连接的最下方是你要的答案

http://www.experts-exchange.com/Programming/Languages/CPP/Q_22048796.html

引用:

phongtran72:

Well, this generates error:

#include "jni.h"

#include "stdafx.h"

#include

#include

And this is solution:

#include "stdafx.h"

#include

#include

#include "jni.h"  回复  更多评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值