使用动态加载动态链接库的方法, 需要用到的API函数有: LoadLibrary, FreeLibrary, GetProcAddress, CallWindowProc ...。 但是在VB中实现起来有局限性,问题就出在CallWindowProc的调用上:调用的参数个数、类型是固定的。例如: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 LongPrivate Sub Form_Load() On Error Resume Next Dim lb As Long, pa As Long lb = LoadLibrary("user32") pa = GetProcAddress(lb, "SetWindowTextA") CallWindowProc pa, Me.hWnd, "Hello !", ByVal 0&, ByVal 0& FreeLibrary lb End Sub
但是在VB中实现起来有局限性,问题就出在CallWindowProc的调用上:调用的参数个数、类型是固定的。例如: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 LongPrivate Sub Form_Load()
On Error Resume Next
Dim lb As Long, pa As Long
lb = LoadLibrary("user32")
pa = GetProcAddress(lb, "SetWindowTextA")
CallWindowProc pa, Me.hWnd, "Hello !", ByVal 0&, ByVal 0&
FreeLibrary lb
End Sub