下面的程序是某位大虾编的,运行后,vb提示“找不到dll入口GetlogicaldrivestringsA in kernel32”
本人试着在system32下找到kernel32.dll,并使用regsvc32.exe kernel32.dll来注册kernel32.dll,系统提示已经加载kernel32.dll,但并未找到dllregisterserver输入点。
不知道为什么下述程序不能运行?是不是在vb主程序里要设置什么东东?恳请各位大虾赐教,或帮忙再改改,一定给分。
Option Explicit
Private Declare Function GetDriveType Lib "kernel32 " Alias "GetDriveTypeA " (ByVal nDrive As String) As Long
Private Declare Function GetLogicalDriveStrings Lib "kernel32 " Alias "GetLogicalDriveStringsA " (ByVal nBufferLength As Long, ByVal lpBuffer As String) As LongPrivate Const DRIVE_REMOVABLE = 2
Private Const DRIVE_FIXED = 3
Private Const DRIVE_REMOTE = 4
Private Const DRIVE_CDROM = 5
Private Const DRIVE_RAMDISK = 6
Private Sub Command1_Click()
Dim rtn As String
Dim AllDrives As String
Dim JustOneDrive As String
AllDrives = Space$(64) ''设置缓冲
rtn = GetLogicalDriveStrings(Len(AllDrives), AllDrives) ''调用函数得到包含所有驱动器的字符串
AllDrives = Left(AllDrives, rtn)
Do
rtn = InStr(AllDrives, Chr(0))
If rtn Then
JustOneDrive = Left(AllDrives, rtn)
AllDrives = Mid(AllDrives, rtn + 1, Len(AllDrives))
rtn = GetDriveType(JustOneDrive) ' '检查驱动器类型
Debug.Print rtn, JustOneDrive
End If
Loop Until AllDrives = " "
End Sub
本人试着在system32下找到kernel32.dll,并使用regsvc32.exe kernel32.dll来注册kernel32.dll,系统提示已经加载kernel32.dll,但并未找到dllregisterserver输入点。
不知道为什么下述程序不能运行?是不是在vb主程序里要设置什么东东?恳请各位大虾赐教,或帮忙再改改,一定给分。
Option Explicit
Private Declare Function GetDriveType Lib "kernel32 " Alias "GetDriveTypeA " (ByVal nDrive As String) As Long
Private Declare Function GetLogicalDriveStrings Lib "kernel32 " Alias "GetLogicalDriveStringsA " (ByVal nBufferLength As Long, ByVal lpBuffer As String) As LongPrivate Const DRIVE_REMOVABLE = 2
Private Const DRIVE_FIXED = 3
Private Const DRIVE_REMOTE = 4
Private Const DRIVE_CDROM = 5
Private Const DRIVE_RAMDISK = 6
Private Sub Command1_Click()
Dim rtn As String
Dim AllDrives As String
Dim JustOneDrive As String
AllDrives = Space$(64) ''设置缓冲
rtn = GetLogicalDriveStrings(Len(AllDrives), AllDrives) ''调用函数得到包含所有驱动器的字符串
AllDrives = Left(AllDrives, rtn)
Do
rtn = InStr(AllDrives, Chr(0))
If rtn Then
JustOneDrive = Left(AllDrives, rtn)
AllDrives = Mid(AllDrives, rtn + 1, Len(AllDrives))
rtn = GetDriveType(JustOneDrive) ' '检查驱动器类型
Debug.Print rtn, JustOneDrive
End If
Loop Until AllDrives = " "
End Sub
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As LongPrivate Const DRIVE_REMOVABLE = 2
Private Const DRIVE_FIXED = 3
Private Const DRIVE_REMOTE = 4
Private Const DRIVE_CDROM = 5
Private Const DRIVE_RAMDISK = 6
Private Sub Command1_Click()
Dim rtn As String
Dim AllDrives As String
Dim JustOneDrive As String
AllDrives = Space$(64) ''设置缓冲
rtn = GetLogicalDriveStrings(Len(AllDrives), AllDrives) ''调用函数得到包含所有驱动器的字符串
AllDrives = Left(AllDrives, rtn)
Do
rtn = InStr(AllDrives, Chr(0))
If rtn Then
JustOneDrive = Left(AllDrives, rtn)
AllDrives = Mid(AllDrives, rtn + 1, Len(AllDrives))
rtn = GetDriveType(JustOneDrive) ' '检查驱动器类型
Debug.Print rtn, JustOneDrive
End If
Loop Until AllDrives = ""
End Sub
从csdn的论坛的缺陷来看,复制、粘贴一次代码,所有引号中多一个空格。而你的代码中引号里面多了两个空格,可想而知,你原来的代码中引号里就有一个空格,你的代码是不是从csdn中复制的?我想可能是一种原因吧!
另一种可能就是你的电脑里的windows或其它的环境变量所指的目录中有一个名为kernel32.dll的文件,VB先找到它的了!而且叫这种名的非系统DLL,往往是病毒!
Private Declare Function GetLogicalDriveStrings Lib "kernel32.dll" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
四楼“kernel32.dll”而不是"kernel32."什么意思阿?能不能再解释清楚点。system32文件夹里,没有kernel32.呀,跟后缀名无关吧,只要是运行kernel32 就会自动指向kernel32.dll吧?