arthur2 писал(а):FuncPointer вместо имени принимает значение, которое получено от IdPntFunc, то есть, принимает непосредственно lpImportAddressesEntry.
Где ты возьмёшь адрес IAE до первого вызова LocalResolver-а?
Модератор: BV
arthur2 писал(а):FuncPointer вместо имени принимает значение, которое получено от IdPntFunc, то есть, принимает непосредственно lpImportAddressesEntry.
Хакер писал(а):и не сработает если:
* Установишь значение двух указателей сразу, а потом сделаешь два вызова.
Не понялХакер писал(а): * Установишь значение указателя в рамках одной функции, а вызов сделаешь в рамках другой.
Ну, я сделал для себя - потому что мне как раз надо Пусть это пока времянка.Хакер писал(а):Я могу сделать по другому,
В смысле, это что-то самописное или из кишок бейсика? Как это будет выглядеть в плане использования?Хакер писал(а):но надо вручную вызывать BindFuncToVar.
arthur2 писал(а):Не понял
Sub Main
Foo
Bar
End Sub
Sub Foo
FunctPointer("kai") = 123 ' Но по твоему методу.
End Sub
Sub Bar
kai 1, 2, 3
End Sub
arthur2 писал(а):В смысле, это что-то самописное или из кишок бейсика? Как это будет выглядеть в плане использования?
Option Explicit
Private Declare Function kai Lib "*" (a As Long, b As Long, c As Long) As Long
Private idKai As Long
Sub Main()
MagicPointersOnOff True
Foo
lalala
Bar
MagicPointersOnOff False
End Sub
Sub Foo()
MakeIdPnt "kai", idKai
End Sub
Sub lalala()
FuncPointer(idKai) = L_(AddressOf test)
End Sub
Sub Bar()
kai 1, 2, 3
End Sub
Sub test(a As Long, b As Long, c As Long)
MsgBox a + b + c
End Sub
arthur2 писал(а):Теперь внутри LocalResolver, если мы вместо адреса функции извлекли из коллекции -1, это знак того, что в m_DiscoveredPointers лежит адрес идентификатора <...>
Option Explicit
Private Declare Function kai Lib "*" (a As Long, b As Long, c As Long) As Long
Private idKai As Long
Sub Main()
MagicPointersOnOff True
FuncPointer("kai") = L_(AddressOf test)
kai 1, 2, 3
MagicPointersOnOff False
End Sub
Sub test(a As Long, b As Long, c As Long)
MsgBox a + b + c
End Sub
там у тебя там пропущено on error goto 0, в исправленной тоже. Пойду поэкспериментируюarthur2 писал(а):но ошибка почему-то не генерируется,
Собственно, я ведь так приблизительно и сделал: мою MakeIdPnt можно было бы назвать и так. Она именно что связывает некую переменную с конкретным указателем.Хакер писал(а):Я могу сделать по другому, примерно как хочет BV: каждому указателю будет соответствовать своя переменная, но надо вручную вызывать BindFuncToVar.
arthur2 писал(а):на какие фишки из COM он будет полагаться?
Mikle писал(а):Как обстоят дела с обновлениями?
Mikle писал(а):В первую очередь интересует оптимизация скорости - отказ от коллекций, да и от Variant тоже бы.
Mikle писал(а):Что если, как вариант, сделать быстрые неизменяемые указатели?
Mikle писал(а):Это для COM-интерфейсов, не поддерживающих IDispatch.
Хакер писал(а):Единственное, что из этого вытекает, это невозможность привести ссылку к типу Object (но при том опять же запросто можно привести к Unknown).
Mikle писал(а):И то, и другое, приведёт к позднему связыванию?
Dim T As Object
ger_kar писал(а):Аболдеть! Классная статейка, Хакеру просто огромный респект.
For i = 1 To m_DiscoveredPointers.Count
PutMem4 m_DiscoveredPointers(i), 0
Next i
Если так, то тогда последнее поле не затирается.Хакер писал(а):Либо по смещению 0 что-то хранится
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4