Я имею в виду родительский класс из дочернего класса; вместо того, чтобы просто делать, для примера :
Public Property Set Parent(obj As ClassProperties)
Set this.ParentColl = obj
End Property
я предпочитаю избегать ссылок на запутывание и запутывание и ошибку «недостаточно памяти», когда я oop прошёл и создал экземпляры класса, поэтому я использую это , основанное на , что .
Он функционирует как брелок в 32 битах, но в 64 битах я получаю Ошибка выполнения '53' Файл не найден: ядро.
В модуле:
#If VBA7 Then
Private Declare PtrSafe Sub CopyMemory Lib "kernel" Alias "RtlMoveMemory" _
(dest As Any, Source As Any, ByVal Length As LongPtr)
#Else
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(dest As Any, Source As Any, ByVal Length As Long)
#End If
'Returns an object given its pointer.
Public Function ObjFromPtr(ByVal pObj As Long) As Object
Dim obj As Object
CopyMemory obj, pObj, 4
Set ObjFromPtr = obj
CopyMemory obj, 0&, 4
End Function
Public Function ObjFromPtrVBA7(ByVal pObj As LongPtr) As Object
Dim obj As Object
CopyMemory obj, pObj, 4 <== here is the error
Set ObjFromPtrVBA7 = obj
CopyMemory obj, 0&, 4
End Function
В дочернем классе:
#If VBA7 Then 'Uses modParentChildDereference
Private mlParentPtr As LongPtr
#Else
Private mlParentPtr As Long
#End If
Public Property Get Parent() As ClassProperties
#If VBA7 Then 'Uses modParentChildDereference
Set Parent = modParentChildDereference.ObjFromPtrVBA7(mlParentPtr)
#Else
Set Parent = modParentChildDereference.ObjFromPtr(mlParentPtr)
#End If
End Property
Public Property Set Parent(obj As ClassProperties)
mlParentPtr = ObjPtr(obj)
End Property
В родительском классе :
Set newItem.Parent = Me
В CopyMemory obj, pObj , 4 Я вижу LongPtr, например 1234567789 ^, но CopyMemory не может найти Obj в ядре.
Я прочитал некоторые глубокие темы по CopyMemory здесь и здесь .
Основываясь на тех, что я немного поиграл с CopyMemory obj, pObj, 4 и дал ему разные цифры, например, 8 и 16, но безрезультатно.
Какие-либо направления или решения? ТИА