----赖格英-----

记忆不好了,记录工作中的点点滴滴....

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
以前写了个获取硬盘序列号的fortran程序,但未经实证
program FortranDemo

     Use Kernel32
     
          Implicit None 
          
          Interface
          
           SUBROUTINE GetDiskSerialNumber1(drive,  pout,  poutsize)
           !DEC$ ATTRIBUTES STDCALL :: GetDiskSerialNumber1
          !DEC$ ATTRIBUTES Alias:'GetDiskSerialNumber1':: GetDiskSerialNumber1
           !DEC$ ATTRIBUTES REFERENCE:: pout,  poutsize
           INTEGER :: poutsize
           CHARACTER(len=1) :: drive
           CHARACTER :: pout(*)
           End SUBROUTINE
           SUBROUTINE DoReg(user,userlen,regid,regidlen)
           !DEC$ ATTRIBUTES STDCALL :: DoReg
          !DEC$ ATTRIBUTES Alias:'DoReg':: DoReg
           !DEC$ ATTRIBUTES REFERENCE:: pout,  poutsize
           INTEGER :: userlen,regidlen          
           CHARACTER :: user(*),regid(*)
           End SUBROUTINE
        
          End Interface
           
          CHARACTER(len=20)  dllname
          Logical RetLog
          INTEGER poutsize
          CHARACTER  drive
          CHARACTER :: pout(100)
          CHARACTER(len=100) :: user
          CHARACTER(len=300) :: regid
          INTEGER userlen,regidlen
          Pointer (fGetDiskSerialNumber1, GetDiskSerialNumber1)
          Pointer (fDoReg, DoReg)
           !32位下INTEGER(4),64位下INTEGER(8)
          !INTEGER(4) hLib
          !DEC$ IF DEFINED (_X86_)          
           INTEGER(4) hLib
           dllname="jydisk.DLL"C
           print *,'win32'
          !DEC$ ELSE          
           INTEGER(8) hLib
           dllname="jydisk64.DLL"C
           print *,'win64 '
          !DEC$ ENDIF         
          
          hLib = LoadLibrary(dllname)

          fDoReg = GetProcAddress(hLib, 'DoReg'C)
      print *,'DoReg= ',fDoReg
          
          fGetDiskSerialNumber1 = GetProcAddress(hLib, 'GetDiskSerialNumber1'C)         
      print *,'GetDiskSerialNumber1= ',fGetDiskSerialNumber1
      
          user="171833017@qq.com"
          regid="telme"
          userlen=len(trim(user))
          regidlen=len(trim(regid))
          call DoReg(user,userlen, regid,regidlen)
          
          drive="c"
          PRINT *, 'in= ',drive
          call GetDiskSerialNumber1(drive, pout,poutsize)
      !print *,'RetLog= ',Retlog

      PRINT *, 'OUTPUT(1)= ',poutsize
          PRINT *, 'OUTPUT(2)= ',pout

          RetLog = FreeLibrary(hLib)


     end program FortranDemo

 

posted on 2018-09-11 21:18  向北方  阅读(888)  评论(0编辑  收藏  举报