这种SafeArray也无法从根本上改变数组类型,这个是VB解析初始类型时定死了。可以通过改变定义一个空数组,让SafeArray指向原数组,来变相转换类型。 如果这种觉得太复杂,可以参考这种 比如你原先定义了 dim a(0) as long 你想转换成Byte型 可以 dim b(3) as byte 然后用Copymemory把 a的数据拷贝到b,这个就转换成了byte 考虑到某种情况下,直接拷出来的数据,修改好后,并不能改变原数组的数据 所以需用要Copymemory把 b的数据拷贝回a 这种方法效率较低,建议是采用SafeArray的方法
Private Type bytetype e(3) As Byte End Type Private Type longtype e As Long End Type Private Sub Form_Load() Dim a() As bytetype Dim b() As longtype ReDim a(0) ReDim b(0) b(0).e = &H11223344 a = b End Sub 这种方法可以省掉Copymemory,通过结构来避开VB类型检测,这样也可以达到转换类型。 不过这个方法内部也是和copymemory差不多的原理,只是可以不用调用API函数
回复 初音✨七奈 : 再问大佬,①如果把控件数组作为传递对象,形参为什么不能写成数组形式,只能写个数组名(如:Private sub 排序(Text1() as object)错误)②Text1为什么不定义为TextBox (如:Private sub 排序(Text1 as Textbox)错误),是不是因为错误原因一样,形参是一个变量,而不是数组?