【实例】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);
}
}
}
|
相关推荐
在VB中,可以使用内置的API函数来访问操作系统底层的功能,比如获取磁盘信息、修改驱动器名称以及读取磁盘序列号。本压缩包文件“VB获取磁盘名称、序列号并修改驱动器名称.rar”显然是一个VB源码示例,用于展示如何...
标题中的“IDE.rar_VB_硬盘序列号查”暗示了这是一个使用Visual Basic(VB)编写的程序...对于IT从业者或学习VB的程序员来说,这是一个了解如何利用VB访问系统信息的实例,同时也是学习API调用和事件驱动编程的好例子。
GetDiskFreeSpaceEx是Windows API提供的一个函数,可以直接从kernel32.dll动态链接库中调用。这个函数可以获取指定驱动器的可用空间、总空间以及总的自由空间。以下是如何在VB.NET中使用这个函数的示例: ```vb.net...
标题中的“IDE硬盘序列号检测并获取VB程序”是指一个使用Visual Basic(VB)...它涉及到VB编程、系统API调用、硬件信息读取和DLL封装等多个IT技术知识点,对于学习VB开发和系统管理的人来说,这是一个很好的学习实例。
VB可以通过读取设备描述来判断是否为U盘。 三、事件处理 1. **WM_DEVICECHANGE**:Windows消息,表示设备的插入或移除。VB程序可以通过处理此消息来响应U盘的插拔。 2. **AddHandler**:VB.NET中的事件处理语法,...