實例說明java調用vb的dll(讀取cpu序列號)

          【實例】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 LongAs Long

              

              
          Public Function GetCPUid(para As StringAs 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(2550)

                      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);

              }


          }


          }

          posted on 2010-11-05 14:18 aiaiwoo 閱讀(1027) 評論(0)  編輯  收藏 所屬分類: Java


          只有注冊用戶登錄后才能發表評論。

          網站導航:
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 台州市| 黄山市| 滨海县| 宣汉县| 德化县| 长治县| 沁阳市| 通化市| 泰兴市| 临潭县| 满洲里市| 潮安县| 青龙| 藁城市| 广灵县| 东城区| 玉树县| 宁南县| 五华县| 蓬莱市| 江山市| 科尔| 六枝特区| 邻水| 常州市| 民和| 云浮市| 宁河县| 贺州市| 塔城市| 长武县| 二连浩特市| 仙游县| 亚东县| 兴城市| 随州市| 久治县| 木里| 多伦县| 双城市| 天台县|