Получение адреса вашей функции
В Access 2000/2002 с этим проблем не возникает, нужно использовать встроенный модификатор AddressOf .
Пример:
Call EnumFontFamiliesEx(hDC, lf, AddressOf EnumFontFamExProc, 0, 0)
В Access 97 все несколько сложней, встроенных средств поддержки функций с обратным вызовом там нет.
Но выход всё же есть.
Декларируем:
Private Declare Function GetCurrentVbaProject _
Lib "vba332.dll" Alias "EbGetExecutingProj" _
(hProject As Long) As Long
Private Declare Function GetFuncID _
Lib "vba332.dll" Alias "TipGetFunctionId" _
(ByVal hProject As Long, ByVal strFunctionName As String, _
ByRef strFunctionId As String) As Long
Private Declare Function GetAddr _
Lib "vba332.dll" Alias "TipGetLpfnOfFunctionId" _
(ByVal hProject As Long, ByVal strFunctionId As String, _
ByRef lpfn As Long) As Long
Аргументы: strFuncName - строка имя вашей функции
Назначение: Получение адреса процедуры по её имени
Возвращает: Адрес функции
Public Function AddrOf(strFuncName As String) As Long
Dim hProject As Long
Dim lngResult As Long
Dim strID As String
Dim lpfn As Long
Dim strFuncNameUnicode As String
Const NO_Error = 0
strFuncNameUnicode = StrConv(strFuncName, vbUnicode)
Call GetCurrentVbaProject(hProject)
If hProject <> 0 Then
lngResult = GetFuncID( _
hProject, strFuncNameUnicode, strID)
If lngResult = NO_Error Then
lngResult = GetAddr(hProject, strID, lpfn)
If lngResult = NO_Error Then
AddrOf = lpfn
End If
End If
End If
End Function
Пример:
Call EnumFontFamiliesEx(hDC, lf, AddrOf("EnumFontFamExProc"), 0, 0)
Ссылки по теме