VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2052|回复: 12

java如何调用vb dll

[复制链接]

1

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-3-6 02:00:02 | 显示全部楼层 |阅读模式
我想要在java中调用一个vb编写的加密用dll,在网上找了一些例子都是通过JNI调用vc编写的dll,请问vb的dll要如何调用呢?
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-5-22 20:15:01 | 显示全部楼层
java-jni-dll

所以你要解决的只是jni(dll)中如何调用dll(vb)的问题。估计stdcall的dll都没什么问题
回复

使用道具 举报

1

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-6-1 16:30:02 | 显示全部楼层
我发现了一个方法,通过jacobdiaoy。
但是还有些问题,请问要调用的dll应该放在什么地方,然后要做什么配置吗?
回复

使用道具 举报

1

主题

51

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-6-2 06:15:02 | 显示全部楼层
class TestDLL {
        static{
                System.loadLibrary("mydll");
        }
        public native int sayHello(int i);

        public static void main(String[] args){
                System.out.print(new TestDLL().sayHello(1));
        }
}
回复

使用道具 举报

1

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-6-3 08:15:01 | 显示全部楼层
三楼是通过jni调用吧,jni调用的dll生成好像比较复杂,我能做成的也是一些vc生成的dll。
对于vb dll的调用我现在通过jacob调用,这里要调用的dll应该放在什么样的路径下,要做什么样的配置,有人知道吗?以下是我的调用程序,注释部分不加入的话编译通过,说明jacob调用可以了,但是注释部分也要算进来的话,就会报没有app.EncryptString方法的错,可见是我的vb dll位置不对或路径配置有问题,有谁能给些指点吗?
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Variant;

public class UserKit{
        public static void main(String[] args){
                ActiveXComponent app = new ActiveXComponent("UserKit.clsRC4");
                String str = "This is a test about jacob!";
                //String enstr = app.EncryptString(str,"admin");
                //System.out.println(enstr);
        }
}
回复

使用道具 举报

0

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-6-4 15:15:01 | 显示全部楼层
class TestDLL {
        static{
                System.loadLibrary("mydll");
        }
        public native int sayHello(int i);

        public static void main(String[] args){
                System.out.print(new TestDLL().sayHello(1));
        }
}
---------------------------------------
  "mydll"是文件名?应该放在什么地方?
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-7 20:15:01 | 显示全部楼层
我用netbean开发的,"mydll"是jni方式生成的dll文件名,在开发环境下我放在项目的根目录,被调用的dll也放在那个目录;生成可执行文件后,两个dll和那个jar文件放在一个目录就行
回复

使用道具 举报

1

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-6-11 09:00:01 | 显示全部楼层
楼上的实现方法还是通过jni方式吧,syHello()和dll下的一个方法是映射好的吧,但是这个映射的过程我不清楚。
我看了下jacob的dll调用,可以生成一个ActiveXComponent对象,比方说可以通过ActiveXComponent app = new ActiveXComponent("proID")生成;但是这个通过这个app如何调用dll内的方法呢?我就不会了,我在app后加点,给出的不是dll内的方法提示,这个和我想的不一样,到这里我就不会做了。
请知道的朋友再说说看。
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-15 11:30:01 | 显示全部楼层
jacob应该不适合你的dll,jacob是在java与微软的com组件之间的桥梁,通过使用jacob自带的dll动态链接库通过jni的方式实现了在sun java平台上的程序对com调用.LZ还是不要怕麻烦,从JNI入手为好。
回复

使用道具 举报

1

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-6-19 12:15:01 | 显示全部楼层
我基本搞定了  虽然有些不理解 但好歹用上dll了
其中UserKit是dll名称,clsRC4是dll工程中的模块,EncrytString和DecrytString是加解密的方法,每个方法有两个参数:一个是原文(密文),一个是密钥。
当然我做的过程对于Dispatch和Variant对象还不是很理解。
package jacob;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.*;

public class Kit {
       
        public static void main(String args[]){
                ActiveXComponent app = new ActiveXComponent("UserKit.clsRC4");
                Dispatch mycom = (Dispatch)app.getObject();
                String s[] = new String[2];
                s[0] = new String("ttt");
                s[1] = new String("admin");
                Variant result = Dispatch.callN(mycom, "EncryptString", s);
                System.out.print(result);
                String es[] = new String[2];
                es[0] = new String("M2t");
                es[1] = new String("admin");
                Variant dresult = Dispatch.callN(mycom, "DecryptString",es);
                System.out.print(dresult);
               
               
        }

}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表