当前位置:编程学习 > C#/ASP.NET >>

硬盘序列号获取代码(VB6.0)升级到VC2005后的 "类型错误"求解!

从网上找到一个用VB6.0编写的硬盘序列号获取程序的源代码,在VB6.0下能正确运行,但将此程序用VC2005的升级功能到VS2005,有几处类型错误,无法正常编译运行,试了各种类型,均有出错提示,求教高手指点:

  ( 一 )  以下这段中的 ... AS ANY 在VC2005中不被支持,请问应该分别修改为什么类型?

Private Declare Function GetVersionEx Lib "KERNEL32"  Alias "GetVersionExA"(ByRef lpVersionInformation As OSVERSIONINFO) As Integer

Private Const CREATE_NEW As Integer = 1
Private Const GENERIC_READ As Integer = &H80000000
Private Const GENERIC_WRITE As Integer = &H40000000
Private Const FILE_SHARE_READ As Integer = &H1s
Private Const FILE_SHARE_WRITE As Integer = &H2s
Private Const OPEN_EXISTING As Integer = 3
    Private Declare Function CreateFile Lib "KERNEL32" Alias "CreateFileA" (ByVal lpFileName As String, _
                                             ByVal dwDesiredAccess As Integer, ByVal dwShareMode As Integer, _
                                             ByVal lpSecurityAttributes As Integer, _
                                             ByVal dwCreationDisposition As Integer, _
                                             ByVal dwFlagsAndAttributes As Integer, ByVal hTemplateFile As Integer) As Integer


    Private Declare Function DeviceIoControl Lib "KERNEL32" (ByVal hDevice As Integer, _
                                                      ByVal dwIoControlCode As Integer, _
                                                      ByRef lpInBuffer As Any, _
                                                      ByVal nInBufferSize As Integer, _
                                                      ByRef lpOutBuffer As Any, _
                                                      ByVal nOutBufferSize As Integer, _
                                                      ByRef lpBytesReturned As Integer, _
                                                      ByVal lpOverlapped As Integer) As Integer
 
    Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (ByRef Destination As Any, _
                                                                         ByRef Source As Any, ByVal Length As Integer)

‘**********以下是出错提示:

错误 1 “Declare”语句中不支持“As Any”。 
错误 2 “Declare”语句中不支持“As Any”。 
错误 3 “Declare”语句中不支持“As Any”。
错误 4 “Declare”语句中不支持“As Any”。

上述出错处中的“ByRef Destination As Any,”这一处尤其无法替换,无论换成什么,以下代码都有相应的出错提示:

 Public Function GetDiskInfo(ByVal nDrive As Byte) As Integer

        Dim hSMARTIOCTL As Integer
        Dim cbBytesReturned As Integer
         Dim VersionParams As GETVERSIONOUTPARAMS
        Dim scip As SENDCMDINPARAMS
        Dim scop() As Byte
         Dim OutCmd As SENDCMDOUTPARAMS
        Dim bDfpDriveMap As Byte
        Dim bIDCmd As Byte 
         Dim uDisk As IDSECTOR

         m_DiskInfo = uDisk
         hSMARTIOCTL = OpenSMART(nDrive)
        If hSMARTIOCTL <> INVALID_HANDLE_VALUE Then
         
            Call DeviceIoControl(hSMARTIOCTL, DFP_GET_VERSION, 0, 0, VersionParams, Len(VersionParams), cbBytesReturned, 0)

            If Not (VersionParams.bIDEDeviceMap \ 2 ^ nDrive And &H10S) Then
                If DoEnableSMART(hSMARTIOCTL, scip, OutCmd, nDrive, cbBytesReturned) Then
                   bDfpDriveMap = bDfpDriveMap Or 2 ^ nDrive
                End If
            End If

   bIDCmd = IIf((VersionParams.bIDEDeviceMap \ 2 ^ nDrive And &H10S), IDE_ATAPI_ID, IDE_ID_FUNCTION)

   ReDim scop(Len(OutCmd) + IDENTIFY_BUFFER_SIZE - 1)
            If DoIDENTIFY(hSMARTIOCTL, scip, scop, bIDCmd, nDrive, cbBytesReturned) Then
           CopyMemory(m_DiskInfo, scop(Len(OutCmd) - 4), Len(m_DiskInfo))
                Call DisplayIdInfo(m_DiskInfo, scip, bIDCmd, bDfpDriveMap, nDrive)
                CloseHandle(hSMARTIOCTL)
                GetDiskInfo = 1
                Exit Function '>---> Bottom
            End If
            CloseHandle(hSMARTIOCTL)
            GetDiskInfo = 0
        Else 'NOT HSMARTIOCTL...
            GetDiskInfo = -1
        End If
    End Function


     请高手指点一二,谢谢。

      交流信箱:sshouxu@gmail.com --------------------编程问答-------------------- 参考 --------------------编程问答-------------------- 无人知道?不会吧? --------------------编程问答-------------------- 用调用这个函数时使用的参数类型代替,针对调用时可能有不同的参数类型,只要重载这个函数就可以了 --------------------编程问答-------------------- vb6的 any 到.net 一般是 Object,但你的这几个建议用Byte数组:
例:ByRef lpInBuffer() As byte

有可能还要考虑 非托管内存 调用的问题。
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,