在win x64中使用VBA中的AddressOf

时间:2014-01-11 22:07:15

标签: access-vba windows-7-x64 addressof

我在winx86中使用这个程序没有任何错误但是当我尝试在win x64中使用它时我的问题就开始了。 我在我的代码中使用ptrsafe让我在win 7 64bit中运行,我将补充说这个模块有更多代码但是对于这个网站的限制我删除了。如果现在需要我的代码行告诉我把它们放在这里。 请帮帮我,告诉我为什么我的代码会产生错误:

'UDT for passing data through the hook
Private Type MSGBOX_HOOK_PARAMS
   hwndOwner   As Long
   hHook       As Long
End Type

Private MSGHOOK As MSGBOX_HOOK_PARAMS
#If VBA7 Then

    Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" _
       Alias "SetWindowsHookExA" _
      (ByVal idHook As Long, _
       ByVal lpfn As Long, _
       ByVal hmod As Long, _
       ByVal dwThreadId As Long) As Long
 #Else

    Private Declare Function SetWindowsHookEx Lib "user32" _
       Alias "SetWindowsHookExA" _
      (ByVal idHook As Long, _
       ByVal lpfn As Long, _
       ByVal hmod As Long, _
       ByVal dwThreadId As Long) As Long
#End If

Public Function MsgBoxHookProc(ByVal uMsg As Long, _
                               ByVal wParam As Long, _
                               ByVal lParam As Long) As Long

   If uMsg = HCBT_ACTIVATE Then

      SetDlgItemText wParam, vbYes, "بلـي"
      SetDlgItemText wParam, vbNo, "خـير"
      SetDlgItemText wParam, vbIgnore, "انصـراف"
      SetDlgItemText wParam, vbOK, "تـــاييد"

      UnhookWindowsHookEx MSGHOOK.hHook

   End If

   MsgBoxHookProc = False

End Function

Public Function MsgBoxFa(Prompt, Optional Buttons As VbMsgBoxStyle = vbOKOnly, Optional Tiltle = "", Optional HelpFile, Optional Context) As Long

  'Wrapper function for the MessageBox API
Dim hwndThreadOwner As Long
Dim frmCurrentForm As Form
Set frmCurrentForm = Screen.ActiveForm

hwndThreadOwner = frmCurrentForm.hwnd

   Dim hInstance As Long

   Dim hThreadId As Long
   Dim hwndOwner As Long
   hwndOwner = GetDesktopWindow()
   hInstance = GetWindowLong(hwndThreadOwner, GWL_HINSTANCE)
   hThreadId = GetCurrentThreadId()

   With MSGHOOK
      .hwndOwner = hwndOwner
'in next line the error produced******************************
      .hHook = SetWindowsHookEx(WH_CBT, _
                                AddressOf MsgBoxHookProc, _
                                hInstance, hThreadId)
   End With


 MsgBoxFa = MessageBox(hwndThreadOwner, Prompt, Tiltle, Buttons)

End Function

0 个答案:

没有答案