精华内容
下载资源
问答
  • 开发需求:需要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换了之后再来详细说明使用心得.

    展开全文
  • 实例说明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/

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201507/14/1436856235_796498.jpg) 求大神解救!我要用jna调用visual basic 封装的dll ;但是我要调用的方法在dll 的对象的对象属性的方法!S0S!
  • 在公司里,不同的系统使用不能的语言非常正常,我曾经在一个公司...但有一个加密算法还非得在客服系统里用到(因为新旧系统要并行运行一段时间,客服系统必须同时能管理新旧两大系统),那么如何在Java调用VB编...

    在公司里,不同的系统使用不能的语言非常正常,我曾经在一个公司就职,原先的博客系统使用asp编写的,里面有很多dll文件,在asp里,可直接调用dll文件,非常简单,但由于系统升级后,都统一使用了Java,那么原先编写的很多模块(封装在dll里的)就都不能用了,但有一个加密算法还非得在客服系统里用到(因为新旧系统要并行运行一段时间,客服系统必须同时能管理新旧两大系统),那么如何在Java中调用VB编写的Dll文件呢?代码如下:

    import com.jacob.com.*;
    import com.jacob.activeX.*;
    
    public class VbdllCall
    {
      public static String md5CallVbdll(String str){
        String res="";
        try {
            ActiveXComponent pp = new ActiveXComponent("md5.Class1");
        	Dispatch myCom = (Dispatch) pp.getObject(); //生成一个对象
        	Variant result = Dispatch.call( myCom, "MD5", str) ;
    		res=result.toString();
        }catch (Exception e) {
        	res="";
            e.printStackTrace();
        }
        return res;
      }
    }

     这里使用到了Jacob包,有兴趣的读者可以Google一下,深入的了解一下这个Jacob包

    展开全文
  • java调用VB写的webservice接口,接口中含有两个结构,如何调用;
  • 便先在网上查看了java调用VB.net的dll的文章,确实是可以调用的。 但是查看的时候才知道dll以及com组件的dll是有差别的,而java调用com组件的dll是非常简单的,也是网上能搜到的方法,至于非com组件的dll能不能调用...

    这几天要用到一个用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。

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


    展开全文
  • java调用VB的函数的类库支持,如果想在java中使用VB的函数,就用这个了。 提供了各种常见VB函数的java实现。
  • 最近有一需求要用JAVA调用VB写的动态库在网上搜了一个方案,试验成功: 1.新建VB工程:MathProj 类名:Math, 代码如下 Public Function Mult(in1 As Variant, in2 As Variant) As Variant Mult = in1 * in...
  • 一、简单说明 java调用动态库其实都是需要通过一些辅助的组件,java调用vc的动态库一般是用JNI,而java调用vb的动态库更确切的说是调用vb的Com组件则是用的jacob了。本人也是班门弄斧,想鄙视我的就鄙视吧,呵呵二...
  • java 用jacob 调用vb写的dll 转载于:https://www.cnblogs.com/guchunchao/p/9798402.html
  • Java 以跨平台深受大家喜欢,而...本例采用VB代码生成调用AutoCAD接口的DLL文件,使用Jacob技术用Java调用DLL文件来实现Java对AutoCAD接口的调用。软件环境:VB6.0,Jacob1.16,Eclipse3.7.2,AutoCAD 2007,win7 ...
  • java Jacob调用VB编写的DLL(COM组件)

    千次阅读 2018-11-01 19:42:29
    项目上有调用Visual Basic 6.0编写的DLL文件的需求,在使用JNA调用无果后,在网上找了部分资料,整理如下。 为什么用JNA无法调用VB生成的COM组件,虽然是dll后缀,但事实上,它应该叫做activex dll,是一种com...
  • 自己试了试成功了,最近需要做一个用Java调用VB类库的需求,先自己尝试下创建个VB的类库   1.新建一个VB工程,工程类型为ActiveX DLL类型。 2.设定工程的名字和类模块的名字。  这里我使用的工程的名字是...
  • JACOB就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。jacob对于com组件的访问调用,在方式上已经大大简化,能够像C#一样通过简单的代码调用...
  • Java 以跨平台深受大家喜欢,而由于它跨平台的目的,需要运行在java虚拟机上工作,使得它和本地机器...本例采用VB代码生成调用AutoCAD接口的DLL文件,使用Jacob技术用Java调用DLL文件来实现Java对AutoCAD接口的调用...
  • 某个项目中涉及到这样一个情景: VB写的原始项目要调用Python的一些方法完成特殊的操作, 那么这就涉及到了,在.Net Framework中如何调用Python的脚本方法。具体步骤流程如下所示:(1): 展示一个简单的Python代码,...
  • 调用解析器的用户代码必须捕获此异常并使用中止的解析。一个更复杂的解决方案,让解析器报告语法错误,但从错误中恢复并继续解析;如果您还希望获得可用的树,那么任何此类恢复必须在错误点的节点上使用某种标记来...
  • Java如何通过VC调用VB编写的COM

    千次阅读 2009-07-09 09:10:00
    以下转载自:http://blog.csdn.net/tiger119/archive/2005/11/16/531081.aspx 前几天,一位同事问起如何在java调用vb写的com,以前知道可以用java的native方式,通过windows dll中转来实现,但未实践过,今天...
  • 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.....
  • 调用外部应用程序(譬如VB,有应用程序窗口的情况)import java.io.*;public class execOP {public execOP(){//TODO}/*** 執行外部的程序(參數為數組).返回程序的輸出(不具有輸入的功能)* @param appParam 程序及參數組...
  • vb调用java程序

    2013-08-20 20:10:40
    各位前辈,请教一下:在vb中如和调用如下java代码(本人初学者,给出示例吧!!!) public class A { public static void main(String[] args) { System.out.println("hello world"); } }
  • 一、引言微软采用O比2技术把...而且通过编程调用,用户可以自己定制用户界面并编制适当的模板,实现二次开发。在omce中,每个内容和功能单元,工作簿(worklx洲k)、工作表(worksheet)、文档、文本范围、幻灯等都是对...
  • 使用java调用webservice接口 正常 使用webservice Stuio调用正常 但是使用vb6调用就 Client:Incorrect number of parameters supplied for SOAP request HRESULT=0x80070057: 参数错误。 - Client:...
  • 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
  • vb写的surfer二次开发,可通过java调用生成等值线
  • 一、VB调用webservice常用方法:需要安装SoapToolkit30.EXE,并在工程中引用Microsoft Soap Type Library v3.0Private Sub CallWebService()Dim m_spClient As New SoapClient30 'SoapClient30对象实例化m_spClient....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 459
精华内容 183
关键字:

java调用vb

java 订阅