java 调用DLL的两种方式

方法一 使用JNI方式调用DLL,这种方式有个明显的缺点,就是必须先写好JAVA类,再通过JAVA类去创建DLL,这种方式在调用第三方类库时显然不可行。好处是JAVA类调用比较简单,已经明确知道DLL接口。

流程如下:

1 编写TestPmCtrl.java
2 Java TestPmCtrl  产生TestPmCtrl.class
3 Javah TestPmCtrl 产生TestPmCtrl.h
4 把TestPmCtrl.h中的<jni.h>修改为"jni.h"
5 在PmCtrlDll工程中PmCtrlDll动态库创建工程中添加java调用函数,这里添加了以下4个函数
//输出电压电流
JNIEXPORT jlong JNICALL Java_TestPmCtrl_OutPutValue
(JNIEnv *env, jobject obj, jstring jMode, jstring jPara)
{
const char *strMode = env->GetStringUTFChars( jMode , 0);  
const char *strPara = env->GetStringUTFChars( jPara , 0);
//执行代码
}


//停止输出
JNIEXPORT void JNICALL Java_TestPmCtrl_Stop
(JNIEnv *, jclass)
{
//执行代码
}

JNIEXPORT void JNICALL Java_TestPmCtrl_OutPutState
  (JNIEnv *env, jobject obj, jbooleanArray jArray)
{
env->GetArrayLength(jArray);
BYTE bState[4] = {0};
unsigned char* psta = (unsigned char*)env->GetBooleanArrayElements(jArray,0);
bState[0] = (unsigned char)psta[0];
bState[1] = (unsigned char)psta[1];
bState[2] = (unsigned char)psta[2];
bState[3] = (unsigned char)psta[3];
//执行代码

SetOutStatus(bState);
}

//读入开关状态
JNIEXPORT jcharArray JNICALL Java_TestPmCtrl_ReadInputState
(JNIEnv *env, jobject obj)
{
//实现返回状态结果处理
jcharArray ar = env->NewCharArray(nCount);
for (int i=0;i<nCount;i++)
{
//执行代码
}

return ar;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值