/JavaInvokeCSharpDLL

java通过c++中间件调用c#dll的jna示例

Primary LanguageC#

JAVA通过c++中间件调用c#生成DLL

时间:2017-8-23 16:38:16<br>  
目的:java调用c动态链接库<br>  
工具:JNA<br>  

简要流程:<br>  
	JAVA---->JNA---->C++  ---->C<br>  


项目结构<br>  
Common//c<br>  
	CommonFunction//业务逻辑类<br>  
	Invoke.java//java示例文件<br>  
DllTest01//c++<br>  
	头文件<br>  
		main.h<br>  
	源文件
		main.cpp<br>  
		


实现跨语言调用的两种方式:<br>  
1、JNI 简陋,古老  java<--->c双向调用<br>  
2、JNA 强大,集成  java---->c单方面调用,其基础是JNI<br>  

jna中间件开源项目:<br>  
[JNA project](https://github.com/java-native-access/jna)<br>  
示例说明blog:
http://blog.csdn.net/lovesomnus/article/details/45073343<br>  
c++调用c:
1、将c++项目改成clr公共运行时<br>  
2、using namespace 命名空间名<br>  
3、使用gcnew获得对象,对象名前面需要加^,开始访问<br>  


注意事项:<br>  
1、jdk版本要与dll版本一致,不然会报加载dll失败异常(找不到dll)<br>  
2、引用文件要拷贝到jdk的bin目录下。(无效内存访问异常)<br>  
3、类型转换要参考jna api开发规范<br>  
4、无效内存访问异常还可能由类型异常引发,比如java里面的String对应c++里面的char*<br>  
5、c 动态链接库项目需要强制签名、com可见、注册。<br>