Visual Basic 6 检查 dll 是否存在
Visual Basic 6 check if dll exists
我需要一点帮助,如果检测到 test.dll(test.dll 只是一个示例)并且 dll 不存在,我正在尝试退出子程序,继续做代码中的其他事情。我正在尝试这样做,但是即使 dll 存在,sub 也不存在。你能告诉我哪里错了吗?有什么建议吗?我在下面留下一个例子。
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Sub main()
If GetModuleHandle("test.dll") = 1 Then
Exit Sub
Else
Do other things
End if
End sub
根据:[MS.Docs]: GetModuleHandleA function (libloaderapi.h)(重点是我的):
Retrieves a module handle for the specified module. The module must have been loaded by the calling process.
所以:
GetModuleHandle 不是正确的方法,因为 .dll 应该已经加载到它的进程中成功(并且它在磁盘上的存在无关紧要)
即使方法正确,条件(= 1
)也不正确。函数 returns(正)处理值(这样的值是 1 的可能性非常小),或者 NULL (0) 如果未加载 .dll
例如 [VBForums]: Classic VB - How can I check if a file exists? 有很多变体,以第 1st(也是最简单的)一个为例:
If Dir("test.dll") <> "" Then
Exit sub
注意,.dll 路径很重要!!!
传统上,文件存在性检查是通过查询文件系统的文件属性来完成的。
Option Explicit
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Sub Form_Load()
If FileExists("test.dll") Then
MsgBox "DLL exists", vbExclamation
Else
'--- do other things
End If
End Sub
Public Function FileExists(sFile As String) As Boolean
If GetFileAttributes(sFile) = -1 Then ' INVALID_FILE_ATTRIBUTES
FileExists = (Err.LastDllError = 32) ' ERROR_SHARING_VIOLATION
Else
FileExists = True
End If
End Function
访问属性(曾经)在各种网络提供商中进行了优化,因此这在网络共享上表现非常好。
使用 Dir
检查文件是否存在可能会扰乱您当前的目录枚举过程。通常 Dir
VB6 运行时中的函数是使用全局状态进行本地操作的一个非常糟糕的例子——从来都不是一个好的设计模式。
我需要一点帮助,如果检测到 test.dll(test.dll 只是一个示例)并且 dll 不存在,我正在尝试退出子程序,继续做代码中的其他事情。我正在尝试这样做,但是即使 dll 存在,sub 也不存在。你能告诉我哪里错了吗?有什么建议吗?我在下面留下一个例子。
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Sub main() If GetModuleHandle("test.dll") = 1 Then Exit Sub Else Do other things End if End sub
根据:[MS.Docs]: GetModuleHandleA function (libloaderapi.h)(重点是我的):
Retrieves a module handle for the specified module. The module must have been loaded by the calling process.
所以:
GetModuleHandle 不是正确的方法,因为 .dll 应该已经加载到它的进程中成功(并且它在磁盘上的存在无关紧要)
即使方法正确,条件(
= 1
)也不正确。函数 returns(正)处理值(这样的值是 1 的可能性非常小),或者 NULL (0) 如果未加载 .dll
例如 [VBForums]: Classic VB - How can I check if a file exists? 有很多变体,以第 1st(也是最简单的)一个为例:
If Dir("test.dll") <> "" Then
Exit sub
注意,.dll 路径很重要!!!
传统上,文件存在性检查是通过查询文件系统的文件属性来完成的。
Option Explicit
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Sub Form_Load()
If FileExists("test.dll") Then
MsgBox "DLL exists", vbExclamation
Else
'--- do other things
End If
End Sub
Public Function FileExists(sFile As String) As Boolean
If GetFileAttributes(sFile) = -1 Then ' INVALID_FILE_ATTRIBUTES
FileExists = (Err.LastDllError = 32) ' ERROR_SHARING_VIOLATION
Else
FileExists = True
End If
End Function
访问属性(曾经)在各种网络提供商中进行了优化,因此这在网络共享上表现非常好。
使用 Dir
检查文件是否存在可能会扰乱您当前的目录枚举过程。通常 Dir
VB6 运行时中的函数是使用全局状态进行本地操作的一个非常糟糕的例子——从来都不是一个好的设计模式。