java如何调用vb dll

alpha2007 2007-01-05 12:00:46
我想要在java中调用一个vb编写的加密用dll,在网上找了一些例子都是通过JNI调用vc编写的dll,请问vb的dll要如何调用呢?
...全文
1818 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
alpha2007 2007-01-06
  • 打赏
  • 举报
回复
楼上几位说的过程我粗略看过一些,就是通过javah生成头文件,然后生成dll,这个对于c/c++ dll生成是对的.
我所以会提出问题是因为碰到一个vb dll,生成头文件的过程就无从下手了,请问我理解对吗?不知道除了jacob还有什么方式可以调用vb dll不?我也希望把过程了解清楚,谢谢!
kingfish 2007-01-05
  • 打赏
  • 举报
回复
java-jni-dll

所以你要解决的只是jni(dll)中如何调用dll(vb)的问题。估计stdcall的dll都没什么问题
歪嘴鱼 2007-01-05
  • 打赏
  • 举报
回复
唯一正常办法:

用c/c++写一个调vb dll的jni

歪主意:

去研究一下rundll32.exe这个程序,可以从命令行调dll中的函数。

比如rundll32 user.exe,exitwindows 在98里面可以关机
hoverlees 2007-01-05
  • 打赏
  • 举报
回复
JNI技术,而且并不是随便一个dll文件都可以调用的,这个dll文件必须是按java类通过javah命令生成的头文件写.
alpha2007 2007-01-05
  • 打赏
  • 举报
回复
我基本搞定了 虽然有些不理解 但好歹用上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);


}

}
RechardXc 2007-01-05
  • 打赏
  • 举报
回复
jacob应该不适合你的dll,jacob是在java与微软的com组件之间的桥梁,通过使用jacob自带的dll动态链接库通过jni的方式实现了在sun java平台上的程序对com调用.LZ还是不要怕麻烦,从JNI入手为好。
alpha2007 2007-01-05
  • 打赏
  • 举报
回复
楼上的实现方法还是通过jni方式吧,syHello()和dll下的一个方法是映射好的吧,但是这个映射的过程我不清楚。
我看了下jacob的dll调用,可以生成一个ActiveXComponent对象,比方说可以通过ActiveXComponent app = new ActiveXComponent("proID")生成;但是这个通过这个app如何调用dll内的方法呢?我就不会了,我在app后加点,给出的不是dll内的方法提示,这个和我想的不一样,到这里我就不会做了。
请知道的朋友再说说看。
RechardXc 2007-01-05
  • 打赏
  • 举报
回复
我用netbean开发的,"mydll"是jni方式生成的dll文件名,在开发环境下我放在项目的根目录,被调用的dll也放在那个目录;生成可执行文件后,两个dll和那个jar文件放在一个目录就行
alpha2007 2007-01-05
  • 打赏
  • 举报
回复
顶一下,疑惑同楼上。
Netself 2007-01-05
  • 打赏
  • 举报
回复
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"是文件名?应该放在什么地方?
alpha2007 2007-01-05
  • 打赏
  • 举报
回复
三楼是通过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);
}
}
lixiaoxue85 2007-01-05
  • 打赏
  • 举报
回复
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));
}
}
alpha2007 2007-01-05
  • 打赏
  • 举报
回复
我发现了一个方法,通过jacobdiaoy。
但是还有些问题,请问要调用的dll应该放在什么地方,然后要做什么配置吗?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧