精华内容
下载资源
问答
  • VB代码转java代码,亲测可用
  • java调用VB的函数的类库支持,如果想在java使用VB的函数,就用这个了。 提供了各种常见VB函数的java实现。
  • 开发需求:需要java调用vb生成的dll动态链接库 开发环境:win10 64位、jdk1.8 64位、springboot、以及dll文件 开发步骤:  1)装载dll文件 有两种方式System.load();和System.loadLibrary(); load需要全路径...

    开发需求:需要java调用vb生成的dll动态链接库

    开发环境:win10  64位、jdk1.8 64位、springboot、以及dll文件

    开发步骤:

            1)装载dll文件

    有两种方式System.load();和System.loadLibrary();

    load需要全路径且需要有文件扩展名;

    loadLibrary是特定路径,系统system32下或项目bin目录下,只要文件名称不要.dll扩展名。

    2)本地声明方法

    装载完dll文件后,将使用的方法用native关键字声明。注意方法名称与dll里的方法名称一致,注意方法名里面尽量不要有下划线,否则在第三步生成.h文件时,方法名下划线之后会多一个阿拉伯数字1,会看着很不方便。

    package com.jni.callvb;
    
    public class ConnectBMAdll {
    
        static {
            System.load("D:\\intellijIDEAworkspace\\jnicallvb\\src\\main\\resources\\dll\\BMA.dll");
        }
    
        public static native String BMA_forecast(String q1,String q2,String q3,String qc);
    
    }

    3)生成.h头文件

    首先需要编译一下我们上面写的java文件生成.class文件,可以直接build project,或者javac xxxx.java,我为了方便直接build。这是目录截图

    然后执行javah命令生成.h文件

    首先cd到src路径下然后再执行,注意路径,照葫芦画瓢,原理勿追.
    javah -classpath <springboot 编译之后生成的target/classes路径>  
    -d <.h文件的输出路径> 
    -jni <java类的全类名com.xxx.xxx.类名>
    实例:
    
    javah -classpath D:\intellijIDEAworkspace\jnicallvb\target\classes 
    -d D:\intellijIDEAworkspace\jnicallvb\src\main\resources\dll 
    -jni com.jni.callvb.ConnectBMAdll
    得到.h文件com_jni_callvb_ConnectBMAdll.h.
    注意:只要函数名中有"_"符号的话,生成的头文件就会自动在"_"后自动加个数字1。

    生成的文件内容如下:

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_jni_callvb_ConnectBMAdll */
    
    #ifndef _Included_com_jni_callvb_ConnectBMAdll
    #define _Included_com_jni_callvb_ConnectBMAdll
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_jni_callvb_ConnectBMAdll
     * Method:    BMA_forecast
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_com_jni_callvb_ConnectBMAdll_BMA_1forecast
      (JNIEnv *, jclass);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    

    至此理论上就可以直接使用定义的本地方法名来使用dll的逻辑处理任务了.

     

    ====================================================================================

    后边因为dll是vb6开发封装的,与开发环境不匹配,所以会出现错误.,等dll换了之后再来详细说明使用心得.

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201507/14/1436856235_796498.jpg) 求大神解救!我要用jna调用visual basic 封装的dll ;但是我要调用的方法在dll 的对象的对象属性的方法!S0S!
  • java Jacob调用VB编写的DLL(COM组件)

    千次阅读 2018-11-01 19:42:29
    项目上有调用Visual Basic 6.0编写的DLL文件的需求,在使用JNA调用无果后,在网上找了部分资料,整理如下。 为什么用JNA无法调用VB生成的COM组件,虽然是dll后缀,但事实上,它应该叫做activex dll,是一种com...

    项目上有调用Visual Basic 6.0编写的DLL文件的需求,在使用JNA调用无果后,在网上找了部分资料,整理如下。

    为什么用JNA无法调用?

    VB生成的COM组件,虽然是dll后缀,但事实上,它应该叫做activex dll,是一种com组件,与标准dll是两个概念。vb生成的dll,虽然也是dll文件,但是它在生成的时候,屏蔽了输出函数,也就是说,你通过dll查看工具查看dll文件可以调用的方法时,是找不到这些函数的入口的,而标准dll则可以通过这种方式查找到函数入口。(如何让vb生成标准dll文件,实际上已经有成熟方法,只是比较麻烦,具体可以参考http://pydoncy.blog.163.com/blog/static/14380839020111149717308/)

    而Java调用dll,根据这种区分,也要使用不同的工具。首先,无论是com组件还是dll文件,它们都是windows下的一种接口规范,对于Java来说,不像C#那样天然可以使用。

    Java本身的机制是通过虚拟机运行程序的,这种方式,对于实体机器的利用效率不高。为此,Java的开发工程师发明了Jni。Jni本身是为了实现Java程序与实体机器的链接,通过调用一些本地已编译的其他语言的代码,尤其是c和c++,从而实现提高效率的目的。(也使得代码重用率提高了)

    因此,想调用vb的com组件,就必须使用jni。但是jni的调用方法太过于繁琐,而且它首先设计于对c和c++代码的调用,需要对调用的函数编写.h的头文件。因此,有其他的一些开源工具,在基于jni的基础上,简化了开发人员的负担,使得开发人员可以通过简单的代码调用,实现目的。

    一开始,我们尝试了jawin这个开源工具。jawin对于如何调用dll这种动态链接库,在jni的基础上实现了简单调用的目的。然而,我们一开始就遇到了找不到函数的问题,也就是前文所说的,vb生成的dll文件是屏蔽了函数入口的。当我们发现这种情况后,我们尝试了让vb生成标准dll,然后还是没有达到目的。

    之后,通过对vb的进一步了解,我们终于了解到com组件与dll(动态链接库)的区别,然后找到了另一个工具-JACOB。JACOB就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。jacob对于com组件的访问调用,在方式上已经大大简化,能够像C#一样通过简单的代码调用。
     

    看到此文章后,在网上搜了下jacob的用法。并且动起手来。

    版本选择

    jacob-1.18.jar 对应 JDK1.7*32

     


    jar包和环境配置
    jacob.jar 放到项目的lib目录
    (方案1)
    win7
    jacob-1.17-x64.dll 放到C:\Windows\System32
    jacob-1.17-x86.dll 放到C:\Windows\SysWOW64
    (方案2)
    把jacob-1.17-x86.dll 放到jdk/jre/bin下,目前选择的这种

    判断环境是否配置成功

    先使用以下测试代码,判断是否是自己的dll出现问题 

        public static void main(String[] args) {
            ActiveXComponent xl = new ActiveXComponent("Excel.Application");
            Dispatch xlo = (Dispatch)(xl.getObject());
            try {
                 System.out.println("version="+xl.getProperty("Version"));
                 System.out.println("version="+Dispatch.get(xlo, "Version"));
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                xl.invoke("Quit", new Variant[] {});
            }
        }

    未出现问题,下一步编写测试代码

        public static void main(String[] args) {
            //初始化
            ComThread.InitSTA();
            //调用Test.Class1
            ActiveXComponent axc = new ActiveXComponent("Test.Class1");
            //axc.invoke("hello","dll");
            //get MS level dispatch object
            Dispatch myCom = (Dispatch) axc.getObject();
            //调用runme ,返回 hello,world
            Variant result = Dispatch.call(myCom, "runme","world");
            System.out.println(result.getString());
        }

    控制台打印hello,world。是不是过程很顺利,哈哈哈要是这么顺利,我会写这个嘛~~~

    问题主要出现在new ActiveXComponent对象时参数的传递。在网上找了一些资料,用以下方法解决问题。

    报错问题:
    1.使用jacob时总是报错“com.jacob.com.ComFailException: Can't get object clsid from progid”

    解决方案:
    出现这个错误的原因,是因为没有把DLL文件注册到系统注册表。
    注册方法: regsvr32 dll文件(绝对路径)

    对于dll文件,可以通过这个工具打开查看:eXeScope 下载地址:http://pan.baidu.com/s/1bpsPzWz

    打开查看dll文件,关注下CLSID值。然后在windows的注册表中搜这个CLSID。

    其实我用eXeScope打开这个dll时并没有看到CLSID值,而是看到了GUID

    百般无奈下在注册表中搜索到了这个,ProgID的值就是需要传递的参数

    最后需要注意,在VB项目工程中,工程名不能为中文名。不知道是不是乱码原因,调用报错。

     

    附:常用操作指令

    注册时用 regsvr32     DLL组件名,
    卸载时用 regsvr32 /u DLL组件名。            
    参考链接:

    http://blog.sina.com.cn/s/blog_c0f210170101ctx2.html

    https://blog.csdn.net/song_qingwei/article/details/21704429

    https://blog.csdn.net/zp357252539/article/details/51586783

    展开全文
  • 实例说明java调用vb的dll(读取cpu序列号) 2007-07-06 16:20     【实例】java调用dll的文档搜了不少,发现都不完整,或者说的不够详细,这里通过自己的实际操作,并将过程做了整理,通过实例说明java如何...

    实例说明java调用vb的dll(读取cpu序列号)

    2007-07-06 16:20

     

     

    【实例】java调用dll的文档搜了不少,发现都不完整,或者说的不够详细,这里通过自己的实际操作,并将过程做了整理,通过实例说明java如何用jacob调用dll里的函数。

    由于某系统加密需要,需要实现从dll里实现某些功能(比如获取当前CPU序列号),并在Java中调用该函数。

    (一)准备工作:需要用到文件有:jacob.dll和jacob.jar分别放到jdk/bin下和class_path下。文件下载地址:

    (二)建立一个VB的Activex Dll 工程,命名为名为getCPU,自动生成Class1文件(工程名字和类名建议用英文名,以防调用时编码出问题),并添加代码如下:

    Private Type OSVERSIONINFO

                        dwOSVersionInfoSize     As Long

                        dwMajorVersion     As Long

                        dwMinorVersion     As Long

                        dwBuildNumber     As Long

                        dwPlatformId     As Long

                        szCSDVersion     As String * 128                     '       Maintenance     string     for     PSS     usage

        End Type

        Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

        Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

        

        Public Function GetCPUid(para As String) As String

        

                On Error GoTo doError

                

                Dim len5       As Long, aa         As Long

                Dim cmprName       As String

                Dim Computer       As String

                Dim CPUs       As Object, MyCpu         As Object

                Dim osver       As OSVERSIONINFO

                Dim SerialNo       As String

        

                '取得Computer     Name

                cmprName = String(255, 0)

                len5 = 256

                aa = GetComputerName(cmprName, len5)

                cmprName = Left(cmprName, InStr(1, cmprName, Chr(0)) - 1)

                Computer = cmprName                       '取得CPU端口号

                Set CPUs = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2").ExecQuery("select     *     from     Win32_Processor")

                For Each MyCpu In CPUs

                        SerialNo = MyCpu.ProcessorId

                        Exit For

                Next

                GetCPUid = SerialNo

                Exit Function

    doError:

                GetCPUid = ""

          End Function

    保存后编译为getCPU.dll 并复制到Windows/System32下。

    (三)将dll导入为com组件

    运行命令:regsvr32 C:\windows\system32\getCPU.dll 显示成功导入。

    (四)建立测试Java文件,内容如下:

    package test;

    import com.jacob.activeX.ActiveXComponent;

    import com.jacob.com.*;

    public class CallDll {

    public static void main(String args[]) {

        ActiveXComponent app = new ActiveXComponent("getCPU.Class1");

        Dispatch mycom = (Dispatch) app.getObject();

        if(mycom!=null){

         Variant result = Dispatch.callN(mycom, "GetCPUid", new String[]{""});

         System.out.print(result);

        }

    }

    }

     

     

    来自:http://luohonghong.blog.163.com/blog/static/783120582009517253324/

    展开全文
  • VB.NET(2010)/JAVA 采用SOAP 与Webservice发送/接收数据
  • 这几天要用到一个用VB.net编写的系统的dll,由于我这边是用的Java调用的。便先在网上查看了java调用VB.net的dll的文章,确实是可以调用的。 但是查看的时候才知道dll以及com组件的dll是有差别的,而java调用com组件...

    这几天要用到一个用VB.net编写的系统的dll,由于我这边是用的Java调用的。便先在网上查看了java调用VB.net的dll的文章,确实是可以调用的。

    但是查看的时候才知道dll以及com组件的dll是有差别的,而java调用com组件的dll是非常简单的,也是网上能搜到的方法,至于非com组件的dll能不能调用我到现在也还是不清楚。而我那个也尝试过生成VB.net的com组件的dll,但是一直报错,而我对vb根本不知道,也就没法调试了。于是只有寻求它法了。

    之后看了网上有 c#生成com组件的文章,于是便尝试了c#调用那个vb dll,确实成功了,调用也是非常简单的。于是,就用他生成了com组件的dll,至于怎么生成的,网上一搜就可以找到了。在此不赘述了。

            在之后发现java调用.net com组件的dll方法基本有两种,就是用jacob和ikvm.net。而JNI貌似是只有这边把dll的代码用java先写一遍才能生成dll(可能有说错,没仔细研究),这种不予考虑。ikvm.net生成那个c#的哪个com组件的时候会报错,这个我也一直解决不了。而jacob生成的确实是成功的,而且网上jacob的资料也比较多,而ikvm.net的资料用百度搜寥寥无几,google不知道。至于调用2层dll,这个是完全没有问题的。

    所以,结论是,如果要生成com组件的dll,我建议用首选jacob。如果你要调用vb.net的dll,而用jacob生成com组件的dll失败的话,可以考虑C#生成com组件,然后c#调用vb的dll,之后用jacob生成c#的com组件的dll。

    以上,是我这几天查阅资料所得的一点小心得。


    展开全文
  • jacob JACOB就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。...使用 下载jacob,下载地址。 把jacob-1.19-x86.dll和jacob-1.1...
  • 自己试了试成功了,最近需要做一个用Java调用VB类库的需求,先自己尝试下创建个VB的类库   1.新建一个VB工程,工程类型为ActiveX DLL类型。 2.设定工程的名字和类模块的名字。  这里我使用的工程的名字是...
  • 操作com组件的可以java直接调用vb的dll 或者直接操作word excel等程序
  • Java调用IDM的api添加任务 功能描述 通过com4j将链接批量发送给IDM进行下载 实现方式 1. 2.通过使用com4j中的TlbImp.jar将IDManTypeInfo.tlb文件转换为ClassFactory,ICIDMLinkTransmitter。 3.关键调用方法 ...
  • Windows API调用过去曾是Visual Basic编程中很重要的一部分,但在 ...只要有可能,应该使用 .NET Framework 中的托管代码而不是Windows API 调用来执行任务。本演练提供有关那些一定要使用Windows API 的场合的信息
  • 易语言JAVA调用 例子

    2019-07-06 19:22:33
    易语言JAVA调用 例子,Java虚拟机,Java本地接口,源码。
  • VB6调用webservice

    2018-12-27 22:06:03
    VB6调用webservice的例子,工程引用了Microsoft soap sdk 3.0 和 xml 6.0 (A vb6.0 program for webservice,using Microsoft soap sdk 3.0 and xml 6.0)
  • JAVA VB C++ DLL接口调用实例Examples.rar
  • VB6.0 做的类接口示例

    2018-10-14 21:25:40
    VB6.0 做的类接口示例,代码清晰明了,非常经典,是初学者的首选
  • 在公司里,不同的系统使用不能的语言非常正常,我曾经在一个公司就职,原先的博客系统使用asp编写的,里面有很多dll文件,在asp里,可直接调用dll文件,非常简单,但由于系统升级后,都统一使用Java,那么原先编写...
  • vb调用java组件SatJni1.2

    2013-08-26 14:07:45
    SatJni是C++编写的动态链接库,实现了C#,PB,Delphi,VB,VC等对Java的调用,能让你很容易地调用成熟的java类库和...示例中演示了通过java调用webservice服务(无需代理对象)得到电话号码和天气信息、调用Base64和MD5等。
  • java 用jacob 调用vb写的dll

    千次阅读 2010-06-10 17:27:00
    这是一个开始于1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献。  最好的支持地点:http://groups.yahoo.com/group/jacob-project<br />  Jacob下载地址: ...
  • Java 以跨平台深受大家喜欢,而由于它跨平台的目的,需要运行在java虚拟机上工作,使得它和本地机器...本例采用VB代码生成调用AutoCAD接口的DLL文件,使用Jacob技术用Java调用DLL文件来实现Java对AutoCAD接口的调用...
  • vb6 调用java WEBSERVER

    2013-08-14 10:34:26
    一个调用JAVA的WEBSERVER方法实例,用VB6写的,简单明了
  • Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java...
  • vb写的surfer二次开发,可通过java调用生成等值线
  • 一、简单说明 java调用动态库其实都是需要通过一些辅助的组件,java调用vc的动态库一般是用JNI,而java调用vb的动态库更确切的说是调用vb的Com组件则是用的jacob了。本人也是班门弄斧,想鄙视我的就鄙视吧,呵呵二...
  • C语言、C++、JavaVB、Python语言的特点和对比 (1)C语言 ·C语言中重点学习指针、内存、数据类型,如 整数 数据类型C语言提供了超过五种以上的数据类型。 ·C语言的语言本质是希望编程者能够理解计算机体系结构,使...
  • vb6.0调用webservice详解

    热门讨论 2014-07-06 09:26:43
    网上写vb6.0调用webservice的都写得比较简单, 这个结合实例作了较详细介绍
  • vb 调用java的webServices

    千次阅读 2011-08-18 14:55:06
    VB调用Java的webServices:  第一步: 首先需要下载soapsdk.exe程序后进行安装,安装完VB工程里面会有Microsoft Soap Type Library v3.0  第二步: 打开VB6.0 建立标称exe 并引用Mic
  • 从网上收录的一些JAVAVB的一些正则表达式使用例子, 希望能对大家有帮助!
  • import java.util.List; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.ArrayList; imp.....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,816
精华内容 22,326
关键字:

java调用vb

java 订阅