【发布时间】:2021-01-27 05:39:12
【问题描述】:
我正在调查一些似乎与记录集对象相关的旧 VB6 代码中的内存泄漏,因此我正在尝试获取对象的引用计数。我在网上找到了一些代码,可以计算对对象的引用,它适用于本土类。但是当我尝试将它应用于 ADODB 记录集对象时,计数始终为 1492925242。我在现有应用程序中尝试过,然后在虚拟应用程序中尝试过 - 总是返回相同的数字(除非没有引用,那么它是0).
获取引用计数的代码如下:
Private Declare Sub RtlMoveMemory Lib "kernel32" (dest As Any, src As Any, ByVal nbytes As Long)
Function objRefCnt(obj As IUnknown) As Long
If Not obj Is Nothing Then
RtlMoveMemory objRefCnt, ByVal ObjPtr(obj) + 4, 4
objRefCnt = objRefCnt - 2
Else
objRefCnt = 0
End If
End Function
这是在 ADODB 记录集上调用它的代码:
Sub main()
Dim obj_1 As ADODB.Recordset
Dim obj_2 As ADODB.Recordset
Debug.Print objRefCnt(obj_1) ' 0
Set obj_1 = New ADODB.Recordset
Debug.Print objRefCnt(obj_1) ' 1
Set obj_2 = obj_1
Debug.Print objRefCnt(obj_1) ' 2
Debug.Print objRefCnt(obj_2) ' 2
Set obj_2 = New ADODB.Recordset
Debug.Print objRefCnt(obj_1) ' 1
Debug.Print objRefCnt(obj_2) ' 1
End Sub
这将返回以下内容:
0
1492925242
1492925242
1492925242
1492925242
1492925242
但是当我添加一个名为 Class1 的虚拟类,它有一个属性(一个整数),并创建 obj_1 和 obj_2 作为 Class1 对象时,我得到了这个:
0
1
2
2
1
1
关于如何获得 ADODB 记录集的引用计数的任何想法? 提前致谢。
【问题讨论】:
标签: vb6 adodb reference-counting