在VBA中加载DLL的功能

时间:2014-10-07 12:12:09

标签: 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 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,但保留它时,VBA停止工作,所以我认为问题出在代码的那一部分。

0 个答案:

没有答案