windows – 在Visual Basic 6中访问动态加载的DLL(使用LoadLibra
发布时间:2020-12-13 20:44:12 所属栏目:Windows 来源:网络整理
导读:我需要为DLL创建一个包装器,根据需要加载和卸载它(对于那些对此问题的背景感兴趣的人,请参阅 How to work around memory-leaking 3rd party DLL (no source code) accessed by Tomcat application?).我在Visual Basic 6中执行此操作,并使用以下示例进行加载
我需要为DLL创建一个包装器,根据需要加载和卸载它(对于那些对此问题的背景感兴趣的人,请参阅
How to work around memory-leaking 3rd party DLL (no source code) accessed by Tomcat application?).我在Visual Basic 6中执行此操作,并使用以下示例进行加载和卸载:
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Private Sub cmdTestLoadingDLL_Click() Dim lb As Long,pa As Long lb = LoadLibrary("D:projectsotherVB_DLLsTestDLLTestDLL.dll") Msgbox "Library address: " + lb FreeLibrary lb End Sub 我可以看到使用Process Explorer在显示消息框时将DLL加载到内存中,然后丢弃.但是,调用该方法自然是不够的 – 我需要访问动态加载的DLL中的方法. 我怎样才能做到这一点?我想在类mainClass中调用方法getVersion,它在TestDLL中,如下所示: Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Private Sub cmdTestLoadingDLL_Click() Dim lb As Long,pa As Long Dim versionString As String lb = LoadLibrary("D:projectsotherVB_DLLsTestDLLTestDLL.dll") versionString = "- From DLL: " + mainClass.getVersion MsgBox versionString FreeLibrary lb End Sub 但是,行 versionString = "- From DLL: " + mainClass.getVersion 抛出错误“需要对象”.
首先,由于您通过LoadLibrary调用它,因此这里没有类 – 只导出函数供公众使用.所以你的mainClass引用永远不会工作.假设您有一个导出的函数getVersion.
我会尝试以下方法: Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long,ByVal lpProcName As String) As Long Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long,ByVal hWnd As Long,ByVal Msg As Any,ByVal wParam As Any,ByVal lParam As Any) As Long Private Sub Foo On Error Resume Next Dim lb As Long,pa As Long Dim versionString As String Dim retValue as Long lb = LoadLibrary("D:projectsotherVB_DLLsTestDLLTestDLL.dll") 'retrieve the address of getVersion' pa = GetProcAddress(lb,"getVersion") 'Call the getVersion function' retValue = CallWindowProc (pa,Me.hWnd,"I want my version",ByVal 0&,ByVal 0&) 'release the library' FreeLibrary lb End Sub (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何配置Compass在Windows上生成带有Unix行尾的文件?
- windows – SwitchToThisWindow将当前窗口发送到后面
- windows – 系统进程正在保存字体文件
- 使用dll和java jni4net时出现UnsatisfiedLinkError异常
- 寻找一双慧眼:Web服务器日志工具点评
- Exp2 后门原理与实践 20165110
- windows-server-2016 – Windows Server 2016中的“数据共享
- 基础常识
- windows-update – 构建WSUS服务器:从哪里开始?
- Windows – Visual Studio 2010 – 如何减少其内存占用
推荐文章
站长推荐
热点阅读