如果实在是搞不明白的话,还可以不声明函数,直接用LoadLibrary加载dll,然后用 GetProcAddress、CallWindowProc调用api函数,下面是一个简单的例子: Create a new project and add this code to Form1 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 Form_Load() On Error Resume Next 'KPD-Team 1999 'URL: http://www.allapi.net/ 'E-Mail: [email protected] 'We're going to call an API-function, without declaring it! Dim lb As Long, pa As Long 'map 'user32' into the address space of the calling process. Lb = LoadLibrary("user32") 'retrieve the address of 'SetWindowTextA' pa = GetProcAddress(lb, "SetWindowTextA") 'Call the SetWindowTextA-function CallWindowProc pa, Me.hWnd, "Hello !", ByVal 0&, ByVal 0& 'unmap the library's address FreeLibrary lb End Sub
rainstormmaster(暴风雨 v2.0) :这种方法我试了还是不行 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 FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long Private 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 Dim DllHand As Long Dim DllProc As Long ChDrive App.Path '用来改变驱动器到指定的有说要dll的驱动器 ChDir App.Path & "\YCTBDDJ_JH" '这一句是将路径指向dll所在的目录 DllHand = LoadLibrary(App.Path & "\YCTBDDJ_JH\PMSMDll.dll") If DllHand = 0 Then MsgBox "没法加载DLL,请先将该工程保存重新启动程序!": Exit Sub DllProc = GetProcAddress(DllHand, "PMSMAnal") If DllProc = 0 Then MsgBox "没找到此函数,请先将该工程保存重新启动程序!": Exit Sub CallWindowProc DllProc, DllHand, 0, 0, 0 ' 执行你的DLL的函数 Call PMSMAnal FreeLibrary DllHand '释放DLL 还是不行:(
Create a new project and add this code to Form1
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 Form_Load()
On Error Resume Next
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: [email protected]
'We're going to call an API-function, without declaring it!
Dim lb As Long, pa As Long
'map 'user32' into the address space of the calling process.
Lb = LoadLibrary("user32")
'retrieve the address of 'SetWindowTextA'
pa = GetProcAddress(lb, "SetWindowTextA")
'Call the SetWindowTextA-function
CallWindowProc pa, Me.hWnd, "Hello !", ByVal 0&, ByVal 0&
'unmap the library's address
FreeLibrary lb
End Sub
而dll如果是activex dll的话,其动态调用的方法就要另说了,如果,想知道的话,回帖
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 FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private 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
Dim DllHand As Long
Dim DllProc As Long
ChDrive App.Path '用来改变驱动器到指定的有说要dll的驱动器
ChDir App.Path & "\YCTBDDJ_JH" '这一句是将路径指向dll所在的目录
DllHand = LoadLibrary(App.Path & "\YCTBDDJ_JH\PMSMDll.dll")
If DllHand = 0 Then MsgBox "没法加载DLL,请先将该工程保存重新启动程序!": Exit Sub
DllProc = GetProcAddress(DllHand, "PMSMAnal")
If DllProc = 0 Then MsgBox "没找到此函数,请先将该工程保存重新启动程序!": Exit Sub
CallWindowProc DllProc, DllHand, 0, 0, 0
' 执行你的DLL的函数
Call PMSMAnal
FreeLibrary DllHand '释放DLL
还是不行:(
DllHand = LoadLibrary(App.Path & "\YCTBDDJ_JH\PMSMDll.dll")
这一句有问题,你换成绝对路径试试