Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在VBA中加载DLL的函数_Excel_Vba_Dll - Fatal编程技术网

Excel 在VBA中加载DLL的函数

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

当我想从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 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库应该有自己的方法。我不熟悉那个特定的库,但它应该在文档中。