
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.217.2] |
![]() |
|
![]() |
Сообщ.
#1
,
|
|
Код...
![]() ![]() ProcPtr = Val(AddressOf ProcName) ...замечательно заменяет код... ![]() ![]() ProcPtr = GetAddr(AddressOf ProcName) ' ... Function GetAddr(ByVal ProcAddr As Long) As Long GetAddr = ProcAddr End Function Предлагаю в FAQ ![]() |
Сообщ.
#2
,
|
|
|
MSDN
Цитата To assign a function pointer to an element in a structure, you write a wrapper function. For example, the following code creates the wrapper function FnPtrToLong, which can be used to put a function pointer in any structure: Function FnPtrToLong (ByVal lngFnPtr As Long) As Long FnPtrToLong = lngFnPtr End Function To use the function, you first declare the type, then call FnPtrToLong. You pass AddressOf plus your callback function name for the second argument. Dim mt as MyType mt.MyPtr = FnPtrToLong(AddressOf MyCallBackFunction) Цитата ALXR @ Предлагаю в FAQ Что тут нового? |
![]() |
Сообщ.
#3
,
|
|
Respect
Цитата Как бы это помягче? Что тут нового? |
![]() |
Сообщ.
#4
,
|
|
FAQ = frequently asked questions. Вопросы про AddressOf задаются нечасто и чел, дошедший до уровня пойнтеров, обычно задает нестандартные вопросы. AddressOf не место в FAQ.
|
![]() |
Сообщ.
#5
,
|
|
MIF
Иными словами, в ФАК можно помещать только топики для чайников? |
![]() |
Сообщ.
#6
,
|
|
Цитата ALXR @ Предлагаю в FAQ Распиши хоть один пример применения этого кода, можно и в FAQ. |
![]() |
Сообщ.
#7
,
|
|
Хм. Ну вот такой примерчик, например:
Навешивание заголовка диалогу выбора папок SHBrowseForFolder: ![]() ![]() Option Explicit Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BROWSEINFO) As Long Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long Private Declare Function SendMessageA Lib "user32.dll" (ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, _ ByVal lParam As Any) As Long Const WM_CREATE As Long = 1 Private Type BROWSEINFO hwndOwner As Long pIDLRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfnCallback As Long lParam As Long iImage As Long End Type Function GetFolder(ByVal hWnd As Long, ByVal sTitle As String, ByVal sCaption As String) As String Dim lpIDList As Long Dim sBuffer As String Dim szTitle As String Dim tBrowseInfo As BROWSEINFO With tBrowseInfo .hwndOwner = hWnd ' Parent window .lpszTitle = sTitle ' Title of folders list .pszDisplayName = App.Title .lpfnCallback = Val(AddressOf BrowseFolderCallback) ' Pointer to callback procedure sCaption = StrConv(sCaption, vbFromUnicode) ' Convert string .lParam = StrPtr(sCaption) ' Pass the caption through lParam End With lpIDList = SHBrowseForFolder(tBrowseInfo) If (lpIDList) Then sBuffer = String(260, 0) SHGetPathFromIDList lpIDList, sBuffer If InStr(sBuffer, vbNullChar) <> 0 Then sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1) GetFolder = sBuffer End If End Function Private Function BrowseFolderCallback(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As _ Long) As Long Select Case uMsg Case WM_CREATE: SendMessageA hWnd, 12, 0, lParam ' Sets our caption (pointer in lParam) to dialogbox End Select BrowseFolderCallback = 0 End Function |
![]() |
Сообщ.
#8
,
|
|
Done.
|
Сообщ.
#9
,
|
|
|
Следует однако помнить, что головастые парни из мелкософта плохого не посоветуют!
Потому помните, что метод ALXR почти в 4 раза медленнее, чем пример из MSDN ! |