|
本帖最后由 zhyzhsh 于 2012-2-28 11:45 编辑
使用API时,我们通常在VBA代码前直接声明。但这样的话,被调用过的DLL文件会被占用直到退出Excel。
如果你需要对DLL进行重新编译和测试就会非常不便。要立即释放的话,我们需要换一种API调用方式。
方法:使用LoadLibrary、FreeLibrary,配合GetProcAddress、CallWindowProc。
- Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
- Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
- Public Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
- Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
- Public Sub test()
- '假设要调用llb.dll文件中的ooo函数。
- Dim hModule As Long
- hModule = LoadLibrary("llb.dll")'如果不在默认DLL搜索路径,请加上路径。
- Dim lpPrevWndFunc As Long
- lpPrevWndFunc = GetProcAddress(hModule, "ooo")'得到ooo函数的地址。
- Dim LRESULT As Long
- LRESULT = CallWindowProc(lpPrevWndFunc, 0, 0, wParam, lParam)'通过地址调用函数,将wParam, lParam改为你的参数。
- Debug.Print "CallWindowProc " & LRESULT'观察调用结果。
- LRESULT = FreeLibrary(hModule)'释放DLL文件。
- Debug.Print "FreeLibrary " & LRESULT'观察调用结果。
- End Sub
复制代码
API详情请参阅MSDN。上述DLL不是ActiveX DLL。
|
评分
-
1
查看全部评分
-
|