VB6:获取DLL的当前路径

VB6:获取DLL的当前路径,dll,path,vb6,ocx,Dll,Path,Vb6,Ocx,我需要在VB6上运行时确定当前dll/ocx的路径。 无法使用app.path,因为它返回使用dll的exe的路径。基于getThisDLLPath()返回当前dll/ocx的完全限定名 获取加载的dll中公共函数的句柄 获取句柄的完整路径 getThisDLLPath()还用作getmodulehandlexa的目标内存地址,因此它需要是公共的,并且位于bas文件中 Option Explicit Private Declare Function GetModuleFileNameW Lib

我需要在VB6上运行时确定当前dll/ocx的路径。 无法使用
app.path
,因为它返回使用dll的
exe的路径。

基于
getThisDLLPath()
返回当前dll/ocx的完全限定名

获取加载的dll中公共函数的句柄

获取句柄的完整路径

getThisDLLPath()
还用作
getmodulehandlexa
的目标内存地址,因此它需要是公共的,并且位于bas文件中

Option Explicit
Private Declare Function GetModuleFileNameW Lib "kernel32.dll" _
    (ByVal hModule As Long, ByVal lpFilename As Long, ByVal nSize As Long) As Long
Private Declare Function GetModuleHandleExA Lib "kernel32.dll" _
    (ByVal dwFlags As Long, ByVal lpModuleName As Long, ByRef phModule As Long) As Boolean

Private Const GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS As Long = &H4
Private Const GET_MODULE_HANDLE_EX_FLAG_PIN As Long = &H1
Private Const GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT As Long = &H2

Private Function getThisDLLHandle() As Long
    Call GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS Or _
             GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, _ 
             AddressOf getThisDLLPath, getThisDLLHandle)
End Function

Public Function getThisDLLPath() As String
    Const MAX_PATH = 260&   
    Dim lphandle As Long        
    lphandle = getThisDLLHandle

    GetThisDLLPath = Space$(MAX_PATH - 1&)
    Call GetModuleFileNameW(lphandle, StrPtr(GetThisDLLPath), MAX_PATH)
End Function

这回答了你的问题吗@JAC,答案是C++。使用该版本作为参考,为VB6制作此版本。我甚至在回答时引用了它。