一、简单说明
java调用动态库其实都是需要通过一些辅助的组件,java调用vc的动态库一般是用JNI,而java调用vb的动态库更确切的说是调用vb的Com组件则是用的jacob了。本人也是班门弄斧,想鄙视我的就鄙视吧,呵呵
二、java调用vc动态库
1、首先,写出java的调用程序,例子代码如下(javacall.java):
public class javacall
{
static
{
System.loadLibrary("calldll");
}
public native static int callcount(int i);
public static void main(String[] args)
{
javacall jc=new javacall();
int j;
j=jc.callcount(10);
System.out.println(j);
}
};
2、利用javacall.java文件生成javacall.class文件和javacall.h头文件。
D:\AdamSoft\batool-g\java_call_dll_for_example>javac javacall.java
D:\AdamSoft\batool-g\java_call_dll_for_example>javah javacall
D:\AdamSoft\batool-g\java_call_dll_for_example>
3、下面利用生成好的头文件来创建vc的动态库,直接在visual studio上面新建一个Win32 Application Wizard文件,Application type选择DLL,然后点击完成即可,source如下:
// calldll.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "javacall.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
JNIEXPORT jint JNICALL Java_javacall_callcount(JNIEnv *, jclass, jint p)
{
int j = p * p;
return j;
}
这时候要将javacall.h头文件拷贝到工程目录中,还有就是需要把jni.h和jni_md.h头文件拷贝到工程目录中。jni.h和jni_md.h头文件都在jdk的include目录里面。最重要的一点是如果是拷贝过来的话,那么javacall.h的头文件中就要将引用头文件的地方#include <jni.h>改成#include "jni.h",这样就会在本地的工程目录中检索头文件了。最后编译下就编译出来了calldll.dll动态库了。将这个动态库拷贝到javacall.class所在的目录中。
4、最后到控制台下面执行下javacall.class看看是不是能计算出10的平方来。
D:\AdamSoft\batool-g\java_call_dll_for_example>java javacall
100
D:\AdamSoft\batool-g\java_call_dll_for_example>
到此java调用vc动态库就算是成功了。
注:贴一个java的环境配置的脚本文件env.bat,内容如下:
color 0a
cd /D D:\AdamSoft\batool-g\java_call_dll_for_example
set JAVA_HOME=D:\Program Files\Java\jdk1.5.0_17
set PATH=%JAVA_HOME%\bin;%PATH%
set CLASSPATH=.;%JAVA_HOME%\lib\tools.jar
cmd.exe
三、java调用vb动态库(com 组件)
1、首先需要准备jacob.jar和jacob.dll两个文件,我这里是1.7版本的,直接在网上搜索下就能找到下载地址了,我这里就不提供了。
2、我们先来将java程序创建出来,我这里创建的名字是javacallvb.java,内容如下:
import com.jacob.com.*;
import com.jacob.activeX.*;
public class javacallvb
{
public static String ShowMsg(String str){
String res="";
try {
ActiveXComponent pp = new ActiveXComponent("DLLProject.VBDLL");
Dispatch myCom = (Dispatch) pp.getObject();
Variant result = Dispatch.call( myCom, "vbShowMsg", str) ;
res=result.toString();
}catch (Exception e) {
res="";
e.printStackTrace();
}
return res;
}
public static void main(String[] args)
{
javacallvb jcv=new javacallvb();
String strRet = jcv.ShowMsg("welcome weigongwan!");
System.out.println(strRet);
}
}
我这里是调用DLLProject库中的VBDLL类里面的vbShowMsg函数,先向里面传递一个参数,然后接收返回来的值,最后打印在控制台上。
3、现在开始创建vb的动态库,更确切的说是现在开始创建vb的Activex dll组件。这里需要注意的是visual studio里面创建出来的Class Library并不是vb中的动态库而是vb.net的库,我们需要用microsoft Visual Basic软件来编译Activex dll库。打开软件后点击ActiveX DLL,在工程窗口中点击Class1(Class1),然后在属性里面将名字改成VBDLL。再点击工程1(工程1)将里面的名字改成DLLProject。这时候我们回过头来在VBDLL的文件里面输入进去我们想要实现的函数,我这里的函数内容如下:
Public Function vbShowMsg(ByVal str As String) As String
MsgBox str
vbShowMsg = "VB:" + str
End Function
Public Function vbCount(ByVal i As Integer) As Integer
vbCount = i * i
End Function
最后,将程序保存,在点击菜单的文件->生成DLLProject.dll(K)...,将动态库生成到javacallvb.java程序所在的目录中。
4、开始准备编译javacallvb.java程序,我们首先要确保当前目录中有文件DLLProject.dll,DLLProject.exp、DLLProject.lib、jacob.dll、jacob.jar、javacallvb.java。确认这些文件都已经存在了,我们打开控制台,我这里的是些的脚本env.bat,直接双击就可以了。运行执行效果如下:
D:\AdamSoft\batool-g\java_call_dll_for_example>javac -classpath
jacob.jar javacallvb.java
D:\AdamSoft\batool-g\java_call_dll_for_example>java -cp jacob.jar;. javacallvb
VB:welcome weigongwan!
D:\AdamSoft\batool-g\java_call_dll_for_example>
到此,我们的java调用vb动态库就算是成功了。
四、java调用vc动态库,再由vc动态库调用vb动态库
1、首先,创建java程序,我这里的就是javacall.java,内容如下:
public class javacall
{
static
{
System.loadLibrary("calldll");
}
public native static int callcount(int i);
public static void main(String[] args)
{
javacall jc=new javacall();
int j;
j=jc.callcount(10);
System.out.println(j);
}
};
这个文件一看就知道是java调用vc动态库的,关于java调用vc动态库的我就不多说了,因为最开始已经介绍过了。
2、vb动态库也不多说了,我这里就是用DLLProject.dll动态库。
3、vc动态库里面的内容我直接贴出来如下:
// calldll.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "javacall.h"
#include <stdio.h>
// 这里是引用vb的动态库,需要用全路径
#import "D:\AdamSoft\batool-g\java_call_dll_for_example\DLLProject.dll" no_namespace
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
short CallFun(short i)
{
short sRet = 0;
BSTR bstrDesc;
try
{
CoInitialize(NULL);
_VBDLLPtr ptr;
ptr.CreateInstance(__uuidof(VBDLL));
sRet = ptr->vbCount(i);
} catch(_com_error e)
{
bstrDesc = e.Description();
}
CoUninitialize();
return sRet;
}
JNIEXPORT jint JNICALL Java_javacall_callcount(JNIEnv *, jclass, jint p)
{
int j = (int)CallFun(p);
return j;
}
以上文件就是vc动态库中的内容。
4、最后,将vb动态库、vc动态库以及javacall.java程序放到同意目录中。执行效果如下:
D:\AdamSoft\batool-g\java_call_dll_for_example>javac javacall.java D:\AdamSoft\batool-g\java_call_dll_for_example>java javacall
100
D:\AdamSoft\batool-g\java_call_dll_for_example>
调用成功,显示出来了10的平方了。
分享到:
相关推荐
在VC客户端调用VB的DLL是一项常见的跨语言编程任务,主要涉及到C++(VC)与Visual Basic(VB)之间的交互。DLL(Dynamic Link Library)是Windows操作系统中的一个重要组件,它封装了可重用的函数和资源,允许不同...
在某些情况下,为了利用C++的高效性能或特定库功能,VB开发者可能需要调用VC++编写的DLL(动态链接库)。本实例详细介绍了如何在VB中调用VC++编写的DLL。 首先,理解DLL是什么至关重要。DLL是一种可执行文件,它...
在本主题中,我们关注的是如何利用Visual Basic(VB)调用由Visual C++(VC)编译生成的COM组件,具体是一个名为“jabbercom.dll”的例子。 首先,COM组件通常是以动态链接库(DLL)的形式存在,它们可以被注册到...
【VB调用VC的DLL】知识点详解 在编程领域,不同语言之间的互操作性是一个重要的需求,例如Visual Basic (VB)这种高级语言可能需要调用由C++ (VC++)编译的动态链接库(DLL)来利用其底层性能优势。本篇文章将详细探讨...
本主题"VB调用VC DLL"主要探讨的是如何在VB6.0项目中使用由VC6.0编译生成的DLL文件。DLL是一种共享库,可以包含多个函数和资源,可供多个程序同时使用,以减少内存占用和提高代码复用性。在VB中调用DLL,可以扩展VB...
### BCB调用VC的DLL知识点详解 #### 标题:BCB调用VC的DLL 在软件开发领域,BCB(Borland C++ Builder)与VC(Visual C++)是两种常用的集成开发环境(IDE)。这两种工具各自拥有丰富的功能和特性,在不同的应用...
本主题涉及的知识点主要集中在如何实现VB调用VC写的DLL,并且DLL能够返回数组数据。 首先,了解DLL的基本概念。DLL是一种可执行文件,包含可供其他程序使用的函数和资源。它们可以被多个应用程序共享,有助于减少...
VB调用VC写的动态链接库DLL
在VB中调用VC写的动态链接库(DLL)可以实现更强大的功能,因为VC++允许开发者利用底层系统资源,而VB则提供友好的用户界面。本教程将深入探讨如何在VB中调用由VC编写的DLL,并提供相关的例程源码。 首先,我们需要...
《VC调用VB DLL:深度解析与实践指南》 在软件开发中,有时我们需要在不同编程语言之间共享功能,这通常涉及到动态链接库(DLL)的使用。本篇将深入探讨如何创建DLL,并在Visual C++(VC)环境中调用由Visual Basic...
VB调用VC编写的DLL.一般来说,VB和VC共同编程有3种方式:一种是VC生成DLL,在VB中调用DLL;一种是VC生成ActiveX控件(.ocx),在VB中插入;还有一种是在VC中生成ActiveX Automation服务器
本主题将深入探讨如何在Visual Studio 2008(VS2008)环境下,使用C++代码调用由VB6.0编写的ActiveX DLL。ActiveX DLL是一种组件,它允许不同编程语言之间的交互,为开发者提供了极大的便利。 首先,我们要理解...
标题中的"C语言调用VBdll"指的是在C或C++编程环境中,如何使用动态链接库(DLL)的方式来调用由Visual Basic编写的函数或方法。VBdll是指使用Visual Basic编译生成的动态链接库,它封装了特定的功能,可以被其他编程...
一步一步教你用VC和VB调用C++ DLL,网上流传的大多是第一部分,‘从VC++应用程序调用C++ DLL的函数‘和’从VC++应用程序调用C++ DLL的类’,这个是完整的,包括 从VB应用程序调用C++ DLL的函数 从VB应用程序调用...
本话题主要探讨如何使用VB调用VC生成的动态链接库(DLL)来实现图片360度旋转的功能。 DLL是一种可执行文件格式,它包含可被其他程序调用的函数和资源。通过创建DLL,开发者可以将代码模块化,提高代码重用性,减少...
本系列文章详细介绍了如何使用VC++和VB调用C++编写的DLL,并分为四个部分,包括从VC++应用调用DLL函数或类、从VB应用调用DLL函数、从VB应用调用DLL类以及动态加载C++ DLL。 首先,我们来看如何从VC++应用程序调用...
在VB调用VC-DLL时,主要涉及以下几个关键步骤: 1. **定义函数接口**:在VB中,你需要声明一个函数原型,该函数原型对应于VC DLL中的函数。函数原型应包含函数名、参数类型和返回值类型。例如,如果你有一个接受...
有时候,我们需要在VB应用程序中利用VC编写的高效功能,这时就需要涉及到VB调用VC生成的动态链接库(DLL)。动态链接库是一种共享代码的方式,它允许多个程序同时使用同一段代码,从而节省内存并方便代码的更新与...
通过调用VC编译生成的DLL,VB应用可以利用DLL中的函数实现更复杂的功能。 **VB调用VC DLL的基本步骤:** 1. **创建VC DLL项目:** - 在Visual Studio中选择新建项目,然后选择C++的DLL模板。 - 定义DLL接口,即...
本文将深入探讨如何使用VB调用VC生成的动态链接库(DLL),以及在两者之间进行指针传递和数组传递的关键知识点。 首先,我们需要理解DLL的作用。DLL是一种可重用的代码库,可以被多个程序同时调用,以减少内存占用...