import heidu004.domain.EmployeeInfo;
import heidu004.persistence.EmployeeInfoDAOImpl;
import JAVA.io.UnsupportedEncodingException;
import JAVA.sql.SQLException;
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.ptions.NativeException;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.MemoryBlockFactory;
public class Dll {
/*
*WebInterface.dll中相关方法
* --------------------------------------------------------------------------------------------
*function EncryptPswStr(PswStr, ResultBuff: PChar; PswLen, BuffLen: Integer): Integer; stdcall;
字符串长度不能超过32位*加密密码字符串
*参数:
*PswStr:需要加密的密码字符串
*ResultBuff:存放加密后的密码字符串的缓冲区。该值为变参
*在调用本函数前,需要为这个缓冲区分配足够的内存空间来接受加密后生成的字符串。
*PswLen:需要加密的密码字符串的长度
*BuffLen:接受加密后生成的字符串的缓冲区的长度。
*这个长度不能大于ResultBuff实际拥有的内存空间长度,否则会造成缓冲区溢出而出现调用异常。
*返回值:
*32位整数,此值表示的是加密后生成的字符串的实际长度,小于或等于BufferLen。若把返回值赋值给N,
*而N小于BufferLen则表示ResultBuff缓冲区中只有前面的N个字节是有效的。
*--------------------------------------------------------------------------------------------
*function DecryptPswStr(PswStr, ResultBuff: PChar; PswLen, BuffLen: Integer): Integer; stdcall;
*解密密码字符串
*参数:
*PswStr:需要解密的密码字符串
*ResultBuff:存放解密后的密码字符串的缓冲区。该值为变参
*在调用本函数前,需要为这个缓冲区分配足够的内存空间来接受解密后生成的字符串。
*PswLen:需要解密的密码字符串的长度
*BuffLen:接受解密后生成的字符串的缓冲区的长度。
*这个长度不能大于ResultBuff实际拥有的内存空间长度,否则会造成缓冲区溢出而出现调用异常。
*返回值:
*32位整数,此值表示的是解密后生成的字符串的实际长度,小于或等于BufferLen。若把返回值赋值给N,
*而N小于BufferLen则表示ResultBuff缓冲区中只有前面的N个字节是有效的。
*--------------------------------------------------------------------------------------------
*function NotifyReadMeter(): Integer; stdcall;
*抄表通知
*参数:无
*返回值:
*32位整数,此值若为零表示抄表通知不成功,可能是抄表软件没有启动、抄表软件版本不正确等等原因。
*若不为零表示抄表通知已经成功。
*/
/*
* 加密
*/
public static final Integer EncryptPswStr(String PswStr, Pointer po,Integer PswLen,Integer BuffLen) throws NativeException, IllegalAccessExcep
tion{
/*
* 方法 一动态连接库的位置是系统目录C:\windows\system32(在web工程下时路径为 例tomcat\bin)
* System.loadLibrary("WebInterface");
* 注意事项如果该项目是web工程时需要将JNativeCpp.dll放到web 服务器的bin中
* 否则会报java.lang.IllegalStateException: JNative library not loaded, sorry !
* 不是web工程时需要将JNativeCpp.dll放入系统C:\windows\system32目录中
*/
System.loadLibrary("WebInterface");//我用的是方法一:WebInterface指的是动态链接库名
JNative n = Null;
n = new JNative("WebInterface","EncryptPswStr");
n.setRetVal(Type.INT);//返回类型整型Type.INT
int i =0;
n.setParameter(i++,PswStr);//方法的了内部参数PswStr 为字符(Type.STRING)类型
n.setParameter(i++,po);//方法的了内部参数po 为字符(Type.STRING)类型
n.setParameter(i++,PswLen);//方法的了内部参数PswLen 为字符(Type.STRING)类型
n.setParameter(i++,BuffLen);//方法的了内部参数BuffLen 为字符(Type.STRING)类型
n.invoke();//加载
return Integer.RetVal());
}
/*
* 十六进制转换成字符
*/
private static String hex16Str(String theHex) {
String theRst = "";
byte[] theByte = new byte[theHex.length() / 2];
try {
for (int i = 0; i < theHex.length(); i += 2) {
theByte[i / 2 ] = Integer.decode("0X"+
theHex.substring(i, i + 2)).byteValue();
}
theRst = new String(theByte, 0, theByte.length, "Shift_JIS"); //Shift_JIS日文编码表
} catch (Exception Ue) {
Ue.printStackTrace();
}
return theRst;
}
/*
* 转字符换成十六进制
*/
private static String str16Hex(String theStr) {
byte[] bytes;
String result = "";
int tmp;
String tmpStr;
try {
bytes = Bytes("Shift_JIS"); //Shift_JIS日文编码表
for (int i = 0; i < bytes.length; i++) {
if (bytes[i] < 0) {
tmp = 256 + bytes[i];
&nb
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论