请问怎么把.dll文件加入我的java工程,并能使用里面的方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问怎么把.dll文件加入我的java工程,并能使用里面的方法?相关的知识,希望对你有一定的参考价值。
1. 编写范例文档public class TestNative
private native static int Max(int a,int b);
public static void main(String[] args)
System.out.println(Max(4,5));
static
System.loadLibrary("VCdll");
其中
LoadLibrary中的DLL文件名称可以随便定.只要做好的动态链接库改名成这个字符串就可以了.而native函数的来源就是该动态链接库.
2. 做好该步准备以后,用javac TestNative.java生成TestNative.class. 检验语法.
3. 语法检查通过以后,用javah TestNative生成TestNative.h的C++头文件.
4. 用VC++6.0创建dll文件:
<1>msdev->new->project->win32 Dynamic-Link Library
<2>Enter project name (e.g. VCdll)
<3>choose "An empty DLL project"->finish
<4>将3生成的TestNative.h和jdk下的jni.h和jni_md.h加入到工程中去
<5>Create a c++ file, implements the native method. as follows:
//TestNative.cpp
#include "TestNative.h"
JNIEXPORT jint JNICALL Java_TestNative_Max
(JNIEnv * a, jclass b, jint x, jint y)
return x > y ? x : y;
备注:
A 其中的jni.h通常在 jdk\include\ 可以先拷贝到VC安装目录下的include目录下.一劳永逸,以后可以方便使用JNI技术.
B 全部的数据类型需要考虑Java和VC的接口问题.用jint jstring 等.
C 函数名称和自动生成的.h文件中规定的一致.命名规则是: Java_使用类_方法名
6. 全编译一下VC++工程.
如果没有出错,则此时生成动态链接库成功.
把动态链接库VCdll.dll拷贝到TestNative.java所在的目录上.
7.运行java TestNative. OK : 参考技术A 楼上是正解我就不多说了,另外我补充一下在后面的网址中
http://blog.csdn.net/gcangle/article/details/8504629
http://zhidao.baidu.com/link?url=OsIWwSLd3fT06dNjpipguKEehYbfDk_AtfZaYFO46K9cVrOlvOlCRrSjrkTZSiE9pV5_NPS_-Heqp0YU0D8Pdq
java调用C#封装的DLL文件
由于要和硬件打交道,公司里有同事把硬件接口用C#封装了一道。现在项目里要用java来开发,要用java调用这些C#封装的dll。
不想用jni,我想直接用jna来处理。但是用jna,java无法直接调用C#封装的dll接口,我想用C++来再次封装C#的dll,然后java来调用C++再封装的dll。java调用C++封装的dll成功,但是不晓得怎么用C++再封装C#的dll并能让java调用。请求帮助!qq396921623
注意是 C++再把C#封装的dll封装一次,留接口给java调用的,谢谢!
例如,我 用C#封装了一个dll,其cs的主要内容如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CreatDll
public class TestA
public int add(int x,int y)
int z = x + y;
return z;
然后生成了一个CreatDll.dll,那么我在C++中再如何封装它,以便我java再调用c++封装的dll
非也!
1. 如果你愿意采用COM组件的方式,可以一试!JAVA有COM4Java的组件(我没记错的话)。
先将C#的dll用COM Callerable Wrapper(CCW)封装一下,在C++中编写COM dll调用C#的托管dll,之后在Java中使用COM4J组件访问这个C++编写的COM dll组件!
如果不明白,使用Google或者Bing搜索下CCW和RCW。
2. webservice
估计你不会这样做的,也没必要
3. 重写下吧,用C++ 参考技术A
先写一个java类,Java代码:
package com.ypoj.jni;public class TestJNI
public native int add(int a, int b);
static
System.loadLibrary("CallCS");
public static void main(String[] args)
TestJNI t = new TestJNI();
System.out.println(t.add(10, 20));
用javah生成的com_ypoj_jni_TestJNI.h,Cpp代码:
#include <jni.h>#ifndef _Included_com_ypoj_jni_TestJNI
#define _Included_com_ypoj_jni_TestJNI
#ifdef __cplusplus
extern "C"
#endif
JNIEXPORT jint JNICALL Java_com_ypoj_jni_TestJNI_add
(JNIEnv *, jobject, jint, jint);
#ifdef __cplusplus
#endif
#endif
接下来先完成C#的 Dll,C#代码:
using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace OJMain
public class OJEntrance
private int result;
public int Result
get return result + 10;
set this.result = value;
参考技术B C#的DLL都用的运行时,需要.net frame work 支持,想用C++封装,也同样需要使用运行时,这样做的还是脱离不了.net frame work ,而且这样形成 的dll能不能被java调用还是个未知数,不过你可以试试,用c++.net的语法进行封装。不过我感觉还是看下源代码自己用C++实现吧。追问
最后一步java实现调用的时候出现失败,导致jvm出现A fatal error
追答C#做的DLL跟标准的DLL不是同一种类型,不支持。net的语言很难去调用 ,所以我建议你自己用C++做一份。
参考技术C 又是.net framework ,又是jre的,这机器得装多少东西。硬件接口底层是c写的吗?c#封装硬件接口还真没有见过。追问确实很蛋疼的,我也是第一次碰到这种,用C#封装的硬件然后又要让java去调用。没法,领导要求,先做出来再说呗。硬件底层什么语言不管它,领导只要求我用java实现调用C#封装的dll
以上是关于请问怎么把.dll文件加入我的java工程,并能使用里面的方法?的主要内容,如果未能解决你的问题,请参考以下文章
VS2010 .net网站怎么重新生成bin下 工程名.dll文件
急!! vivado 问题:把文件烧到板子上的时候,显示 there are no debug cores. 请问怎么解决啊!