在VB里写Declare Function引述DLL时,让地址可选
在VB里写Declare Function引用DLL时,让地址可选
例如:
Dim D As String
D = "c:\zzf\mydll" '可自定义
DeclareFunction outpot Lib "地址" Alias "OUTDATA" (ByValaddr1%, ByVal odata%) As Integer
在运行时怎么让 地址=D的值
------解决方案--------------------
用静态调用无法解决你的问题。只能动态调用了:
------解决方案--------------------
自己实现动态调用API的话确实处理起来比较麻烦,不过有别人封装好的
例如:
Dim D As String
D = "c:\zzf\mydll" '可自定义
DeclareFunction outpot Lib "地址" Alias "OUTDATA" (ByValaddr1%, ByVal odata%) As Integer
在运行时怎么让 地址=D的值
------解决方案--------------------
用静态调用无法解决你的问题。只能动态调用了:
'Let's assume you have a function getVersion that is exported from the TestDLL.dll.
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:\projects\other\VB_DLLs\TestDLL\TestDLL.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
------解决方案--------------------
自己实现动态调用API的话确实处理起来比较麻烦,不过有别人封装好的