看了一位博主的文章,
自己试了试成功了,最近需要做一个用Java调用VB类库的需求,先自己尝试下创建个VB的类库
1.新建一个VB工程,工程类型为ActiveX DLL类型。
2.设定工程的名字和类模块的名字。
这里我使用的工程的名字是DLLTest,类模块的名字是Class1。
3.在类模块中写入要封装的函数
这里我写了一个计算长方体的体积的函数,代码如下:
Function calVolume(ByVal a As Double, ByVal b As Double, ByVal c As Double) As Double
calVolume = a * b * c
End Function
4.保存工程,并生成Dll文件。
通过选择 ”文件“->”生成DllTest.dll“,生成Dll文件。
至此,完成Dll文件的制作。
1.新建一个VB工程,工程类型为标准EXE类型。
2.注册制作的Dll文件。
注册命令格式为:regsvr32 dll文件的绝对地址名称
举例说明:比如我把上面我生成的DllTest.dll放在了E盘的VbTest文件里面了,那么我的注册命令为:regsvr32 E:\VbTest\DllTest.dll。
如果注册成功,系统会有弹窗提示。
(测试发现,注册dll文件时,路径文件夹的名字不能有空格)
至于为啥要注册一下,
看这个回答,
执行注册命令的时候,如果是 Win7 8 10 的话,最好win+X 选管理员的dos界面执行
删除已经注册的dll的话 用 regsvr32 /u xxx.DLL
4.编写调用Dll文件的相关代码。
这里我在主窗体中添加了一个按钮,在按钮里面写入了如下代码:
Private Sub Command1_Click()
Dim MyObj As DllTest.Class1
Set MyObj = New Class1
Dim aa As Double
Dim bb As Double
Dim cc As Double
Dim tempVolume As Double
aa = 1.1
bb = 2.2
cc = 3.3
tempVolume = MyObj.calVolume(aa, bb, cc)
MsgBox tempVolume
End Sub
运行一下,没问题。
==============接着写
ActiveXComponent sC = new ActiveXComponent("DLLTest.Class1");
Dispatch sControl = sC.getObject();
Variant v = Dispatch.call(sControl, "calVolume", new Object[]{10,2,3});
System.out.println(v.toString());
这4行代码运行,ok 调用到了VB。
遇到的几个问题,
Dispatch.call(sControl, "calVolume", new Object[]{10,2,3});
第三个参数是你Vb类库的参数 我试了好久这么写可以的,别的类型的话 我还没看。
我的miniVb 6.0是32位的,我64位的JDK不行,调不到可能需要别的操作,以后再看,
我下了一个32位的JDk 1.7 然后jacob用的是 1.18版本
另外
将jacob.jar 部署在环境变量的jdk的bin目录下。
将jacob.jar 部署在环境变量的jre的bin目录下。
jacob-1.18-x86.dll 我不太清楚所以 在 bin 和 lib文件夹下都放了
这个为了先实现所以没太深入看