网上看到一段代码,拷贝下来实验,
多次运行,停止,运行,停止.然后退出vb,就报个错误出来
请高手帮忙看下!代码如下:
'两个窗体Form1,Form2'Form1 Option Explicit
Private Declare Function ArrayPtr Lib "msvbvm60" Alias "VarPtr" (Ptr() As Any) As Long
Private Type PointSingle
a1 As String
a2 As String
End Type Dim P(1) As PointSingle
Private Sub Form_Load()
P(0).a1 = "士大夫"
P(0).a2 = "大会如同"
P(1).a1 = "如同机"
P(1).a2 = "是"
Form2.Show
Form2.Draw ArrayPtr(P())
End Sub-----------------------------------------------'Form2 Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal lpDest As Long, ByVal lpSrc As Long, ByVal Length As Long)
Private Declare Function ArrayPtr Lib "msvbvm60" Alias "VarPtr" (Ptr() As Any) As Long
Private Type PointSingle
a1 As String
a2 As String
End Type Private Type SAFEARRAY1D
cDims As Integer
fFeatures As Integer
cbElements As Long
cLocks As Long
pvData As Long
cElements As Long
lLbound As Long
End Type
Dim P() As PointSingle
Public Sub Draw(lpPoints As Long)
Dim SA As SAFEARRAY1D
Dim pSA As Long
CopyMemory VarPtr(pSA), lpPoints, 4
CopyMemory VarPtr(SA), pSA, Len(SA)
With SA
If .cDims <> 1 Then Exit Sub
ReDim P(.lLbound To .lLbound + .cElements - 1)
CopyMemory VarPtr(P(.lLbound)), .pvData, .cbElements * .cElements
End With
AutoRedraw = True
Dim i As Long
For i = LBound(P) To UBound(P)
Debug.Print P(i).a1, P(i).a2
Next
End Sub
多次运行,停止,运行,停止.然后退出vb,就报个错误出来
请高手帮忙看下!代码如下:
'两个窗体Form1,Form2'Form1 Option Explicit
Private Declare Function ArrayPtr Lib "msvbvm60" Alias "VarPtr" (Ptr() As Any) As Long
Private Type PointSingle
a1 As String
a2 As String
End Type Dim P(1) As PointSingle
Private Sub Form_Load()
P(0).a1 = "士大夫"
P(0).a2 = "大会如同"
P(1).a1 = "如同机"
P(1).a2 = "是"
Form2.Show
Form2.Draw ArrayPtr(P())
End Sub-----------------------------------------------'Form2 Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal lpDest As Long, ByVal lpSrc As Long, ByVal Length As Long)
Private Declare Function ArrayPtr Lib "msvbvm60" Alias "VarPtr" (Ptr() As Any) As Long
Private Type PointSingle
a1 As String
a2 As String
End Type Private Type SAFEARRAY1D
cDims As Integer
fFeatures As Integer
cbElements As Long
cLocks As Long
pvData As Long
cElements As Long
lLbound As Long
End Type
Dim P() As PointSingle
Public Sub Draw(lpPoints As Long)
Dim SA As SAFEARRAY1D
Dim pSA As Long
CopyMemory VarPtr(pSA), lpPoints, 4
CopyMemory VarPtr(SA), pSA, Len(SA)
With SA
If .cDims <> 1 Then Exit Sub
ReDim P(.lLbound To .lLbound + .cElements - 1)
CopyMemory VarPtr(P(.lLbound)), .pvData, .cbElements * .cElements
End With
AutoRedraw = True
Dim i As Long
For i = LBound(P) To UBound(P)
Debug.Print P(i).a1, P(i).a2
Next
End Sub
解决方案 »
- ActiveReport 2.0 的刷新问题!
- mscomm控件接收数据的问题
- 问一个关于消除窗口的问题
- 简单问题,如何新建一个字段?
- VB中生成报表后怎么样把报表以WORD格式输出呢
- 调用什么函数做曲线图
- jet4.0的bug?请各位大侠赐教!!
- 我用的是递归,出现了堆栈溢出,可是如果改成用链表或数组从写算法太麻烦了,请问有没有更好的办法?谢谢!如果有我愿付100分!!!
- 哪位高手帮我看看下面的代码,我为什么关不掉EXCEL.EXE进程? 急!急!!急!!!急!!!! 谢谢!!!!!!
- 用VB编的程序如何实现钥匙盘加密?
- 哪位用过tcp300设备?
- 在VB6_SP5 中PictureBox有Text属性吗?
SafeArray也是同样的道理,你的做法不仅会发生错误,而且造成内存泄露