如题
就是  JAVA 如何调用DLL得到 inout 类型的参数 值我之前  定义了一个string tmp
把他当参数传入到dll
最后还是去不到  应该如何调用  谢谢 

解决方案 »

  1.   

    如果是传入将参数转成byte[]后传入
    若是传出,则用byte[]后转成String即可
      

  2.   

    就是 先定义个string  然后转成byte[] 然后调用完成后转换成 string ?
      

  3.   


    我试了试 还是不行啊。 jnative = new JNative("test.dll","GetParam");
    byte[] valuebyte = paramValue.getBytes();
    jnative.setParameter(2, Type.STRING,valuebyte);
    jnative.invoke();上面是调用dll的代码 之后应该怎么做呢 ?
      

  4.   

    我调用完毕后
    for(int i = 0 ;i<valuebyte.length;i++){
    byte b = valuebyte[i];
    System.out.println(b); }
    还是全是0 
      

  5.   

    private byte[] transName(String name) {
    byte[] bytes_name = name.getBytes();
    for (int i = 0; i < name.length(); i++) {
    trans[i] = bytes_name[i];
    }
    return trans;
    }
    private String transResult(byte[] rets) { StringBuffer retSB = new StringBuffer();
    for (int i = 0; i < rets.length; i++) {
    retSB.append((char) rets[i]);
    } return retSB.toString();
    }
      

  6.   

    用了以上办法了 还是不行。byte[] transName = this.transName(paramValue);

    jnative.setParameter(2, Type.STRING,paramValue);
    jnative.invoke();
    String transResult  =  this.transResult(transName);transResult  的值任然是空~
      

  7.   

    貌似用的插件不一样 我用的是com.sun.jna.Native;
      

  8.   

    package com.ideal.comm;import java.io.UnsupportedEncodingException;import com.sun.jna.Native;public class Hello {
    public static void main(String[] args) throws UnsupportedEncodingException {
    Hello h = new Hello();
    h.encrypt("para1", "para2");

    }

    private byte[] transName(String name) {
    byte[] bytes_name = name.getBytes();
    for (int i = 0; i < name.length(); i++) {
    trans[i] = bytes_name[i];
    }
    return trans;
    }
    private String transResult(byte[] rets) { StringBuffer retSB = new StringBuffer();
    for (int i = 0; i < rets.length; i++) {
    retSB.append((char) rets[i]);
    } return retSB.toString();
    }

    public String encrypt(String name, String password) {
    String encryption = null;
    byte[] trans = transName(name);
    CLib lib = (CLib) Native.loadLibrary("Encryption", CLib.class);
    int ret = lib.rc4Encrypt(trans, password);

    encryption=transResult(trans);
    return encryption;
    }
    public String decrypt(String name, String password){
    String decrypt = null;
    byte[] trans = invokeName(name);
    CLib lib = (CLib) Native.loadLibrary("dll文件名", CLib.class);
    int ret = lib.rc4Decrypt(trans,password);
    decrypt=transResult(trans);
    return decrypt;

    }
    }
      

  9.   


     private byte[] transName(String name) {
            byte[] bytes_name = name.getBytes();
            for (int i = 0; i < name.length(); i++) {
                trans[i] = bytes_name[i];
            }
            return trans;
        }方法有问题呢  trans 是哪里来的 ?
      

  10.   

    我现在已经用了jna 了 。。 在尝试。