Excel 在VBA中加载DLL的函数
当我想从DLL调用某些信息时,有人告诉我使用CallWindowProc命令。然而,当我使用该命令时,我停留在hWnd部分 代码如下:Excel 在VBA中加载DLL的函数,excel,vba,dll,Excel,Vba,Dll,当我想从DLL调用某些信息时,有人告诉我使用CallWindowProc命令。然而,当我使用该命令时,我停留在hWnd部分 代码如下: Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName A
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
Declare Function d4868activatelog Lib "GSP_stdcall.dll" (ByVal filename As String, functstatus As String) As String
Dim lb As Long, pa As Long
Dim versionString As Long
Dim retValue As Long
Dim vb4868activateLog As Long
Dim vb4868closeLog As Long
Dim vb4868defineDataList As Long
Dim vb4868initProg As Long
Dim vb4868terminate As Long
Dim vb4868getDataListD As Long
Dim vb4868getDataListF As Long
Dim vb4868getDataListI As Long
Dim vb4868getUnits As Long
Dim vb4868isValidParamName As Long
Dim vb4868getErrorMsg As Long
Dim vb4868writeToLog As Long
Dim vb4868run As Long
Dim closeModel As Boolean
Dim loadModelAnsi As Boolean
Sub Foo()
'Load Library
lb = LoadLibrary("GSP_stdcall.dll")
gspMdfFilename = "TJET.mxl"
'start log file
vb4868activateLog = GetProcAddress(lb, "d4868activateLog")
'stop log file
vb4868closeLog = GetProcAddress(lb, "d4868closeLog")
'create a data set
vb4868defineDataList = GetProcAddress(lb, "d4868defineDataList")
'initialize DLL session
vb4868initProg = GetProcAddress(lb, "d4868initProg")
vb4868terminate = GetProcAddress(lb, "d4868terminate")
vb4868getDataListD = GetProcAddress(lb, "d4868getDataListD")
vb4868getDataListF = GetProcAddress(lb, "d4868getDataListF")
vb4868getDataListI = GetProcAddress(lb, "d4868getDataListI")
vb4868getUnits = GetProcAddress(lb, "d4868getUnits")
vb4868isValidParamName = GetProcAddress(lb, "d4868isValidParamName")
vb4868getErrorMsg = GetProcAddress(lb, "d4868getErrorMsg")
vb4868writeToLog = GetProcAddress(lb, "d4868writeToLog")
vb4868run = GetProcAddress(lb, "d4868run")
vb4868programInfo = GetProcAddress(lb, "d4868programInfo")
'Call the getVersion function'
If vb4868programInfo > 0 Then
about = CallWindowProc(vb4868programInfo, Me.hWnd, ByVal 0&, ByVal 0&)
Else
MsgBox "Programinfo is not loaded", vbOKOnly
End If
End Sub
Sub closeDll()
FreeLibrary lb
End Sub
当我想调试这段代码时,我得到了错误“关键字Me的使用无效”。我没有任何使用CallWindowProc命令的经验,我也没有使用hWnd部分的经验。在那部分我需要设置什么?当我不使用Me,但将其保留为blanc时,VBA将停止工作,因此我认为问题出在代码的这一部分。是否尝试了Application.Hwnd?是的,它也会使VBA崩溃。CallWindowProc用于Windows UI中的窗口子类化。这就是你想做的吗?我想不是,我想接收函数中的信息,我只是不知道如何获取和显示它。我在某个地方找到了一个使用CallWindowProc的示例,所以我也使用了它,因为我认为这就是接收信息的方式。您使用的DLL库应该有自己的方法。我不熟悉那个特定的库,但它应该在文档中。