-
Aug 14th, 2019, 12:35 PM
#1
Thread Starter
New Member
Windows August 2019 Update break VB arrays
Hi,
We've just today had a number of VB6 apps die with various 'Error 5' messages.
One was an app we have the source for, and it appears that the August 2019 cumulative update has broken variant arrays ( also in VBA I see mention of on Twitter ). Uninstalling the update fixes everything.
Is anyone else seeing the issue? if so, is it confined to variant arrays, or is the breakage wider?
Thanks
-
Aug 14th, 2019, 12:51 PM
#2
New Member
Re: Windows August 2019 Update break VB arrays
We work with a ERP and this morning some of ours clients had Error 5 messages. The ERP vendor issue a patch that fixed the issue, but for now they didn't share much information about it
-
Aug 14th, 2019, 02:33 PM
#3
Re: Windows August 2019 Update break VB arrays
Do you have a test case exhibiting failures?
So far the only glitch I found was:
Code:
Private Data() As Variant
.
.
.
Private Sub Something()
Data = Array() 'Error 5 here!
End Sub
I was able to fix that by using:
Code:
Private Declare Function VariantArray Lib "oleaut32" Alias "SafeArrayCreateVector" ( _
Optional ByVal VT As VbVarType = vbVariant, _
Optional ByVal LB As Long = 0, _
Optional ByVal cElements As Long = 0) As Variant()
Private Data() As Variant
.
.
.
Private Sub Something()
Data = VariantArray()
End Sub
Last edited by dilettante; Aug 14th, 2019 at 02:36 PM.
-
Aug 14th, 2019, 02:54 PM
#4
New Member
Re: Windows August 2019 Update break VB arrays
We're also encountering issues concerning ParamArrays as is described in this topic: https://answers.microsoft.com/en-us/...0-0a220f1656e9
Microsoft stating that a security fix caused the issue and they're working on a solution for this particular issue.
@dilettante I'd suggest you add that specific error to the topic.
-
Aug 14th, 2019, 02:59 PM
#5
Thread Starter
New Member
Re: Windows August 2019 Update break VB arrays
Originally Posted by dilettante
Do you have a test case exhibiting failures?
Thanks for replying - the office is closed now, so I'll need to check with a colleague to exactly what test cases they'd narrowed down.
Useful info on the fix - I'll bring that up tomorrow
-
Aug 14th, 2019, 03:31 PM
#6
Re: Windows August 2019 Update break VB arrays
Looks like there is more:
Microsoft Pushing VBScript A Little Closer To the Edge
"The change to disable VBScript will take effect in the upcoming cumulative updates for Windows 7, 8, and 8.1 on August 13th, 2019. VBScript will be disabled by default for Internet Explorer 11 and WebOCs for Internet and Untrusted zones on all platforms running Internet Explorer 11. This change is effective for Internet Explorer 11 on Windows 10 as of the July 9th, 2019 cumulative updates."
Not as big a deal for most people, but it will probably burn a few.
So why has Microsoft a down on all things Basic?
I don't think this is quite the story. I don't think Microsoft cares much about anything other than Azure and a future place in the cloud. In this nebulous environment languages are irrelevant - apart from JavaScript and perhaps Python. This is the reason Microsoft is no longer an innovator and leader in the dev world. Instead what we have is the dragging of old carcasses around, the occasional spark when someone notices a way to revitalize an old technology, yes Blazor I'm looking at you, and then a confusing mess of open sourcing and deprecations.
I think this pretty much sums up the advancing senility of a once-great company.
-
Aug 14th, 2019, 07:32 PM
#7
Re: Windows August 2019 Update break VB arrays
So is it just the Array keyword or are other means of declaring/populating a Variant array with array members effected?
-
Aug 14th, 2019, 09:09 PM
#8
Re: Windows August 2019 Update break VB arrays
In the long run, using Microsoft's platforms and tools is a huge disaster. Those who use non-Microsoft environments from the start are lucky. This is why I don't want to use ASP and VBS that Olaf often recommends.
Microsoft is the only big company that doesn't care about users and consumers at all, but lives well.
Very curious, what is the next company to replace Microsoft, although Microsoft is still very strong.
Last edited by dreammanor; Aug 14th, 2019 at 09:21 PM.
-
Aug 14th, 2019, 09:20 PM
#9
New Member
Re: Windows August 2019 Update break VB arrays
I found the problem trying to create a "ragged" 2-dimensional Variant array with the following line of code:
vntArray = Array(Array( ), Array( ), Array( ), Array( ))
This will not work either:
vntA = Array( )
vntB = Array( )
vntC = Array(vntA, vntB) 'Fails here trying to add empty arrays into array
However, this is fine...
Redim vntA(0)
Redim vntB(0)
vntC = Array(vntA, vntB) 'OK, because the arrays A and B are NOT empty; They each contain 1 (empty) element at index 0.
-
Aug 14th, 2019, 09:21 PM
#10
New Member
Re: Windows August 2019 Update break VB arrays
I found the problem trying to create a "ragged" 2-dimensional Variant array with the following line of code:
vntArray = Array(Array( ), Array( ), Array( ), Array( ))
This will not work either:
vntA = Array( )
vntB = Array( )
vntC = Array(vntA, vntB) 'Fails here trying to add empty arrays into array
However, this is fine...
Redim vntA(0)
Redim vntB(0)
vntC = Array(vntA, vntB) 'OK, because the arrays A and B are NOT empty; They each contain 1 (empty) element at index 0.
-
Aug 14th, 2019, 11:34 PM
#11
Re: Windows August 2019 Update break VB arrays
Originally Posted by fafalone
So is it just the Array keyword or are other means of declaring/populating a Variant array with array members effected?
It sounds like calling a procedure with a ParamArray argument also fails when none are provided. See the link in post #4 above.
-
Aug 15th, 2019, 06:04 AM
#12
Re: Windows August 2019 Update break VB arrays
Yes, got my first customer with an error 5.
In the IFileDialog class by LaVolpe, indeed on an empty ParamArray
I added an additional parameter Empty when the function is originally called with only 2 parameters.
And I added error handling, would an OERN catch this error 5?
We don't have this security update yet on the office so I can't test a basic fix.
Code:
Private Function pvCallFunction_COM(ByVal InterfacePointer As Long, ByVal VTableOffset As InterfaceMethodOffsets, _
ParamArray FunctionParameters() As Variant) As Variant
' Used to call active-x or COM objects, not standard dlls
' Return value. Will be a variant containing a value of FunctionReturnType
' If this method fails, the return value will always be Empty. This can be verified by checking
' the Err.LastDLLError value. It will be non-zero if the function failed else zero.
' If the method succeeds, there is no guarantee that the Interface function you called succeeded. The
' success/failure of that function would be indicated by this method's return value.
' Typically, success is returned as S_OK (zero) and any other value is an error code.
' If calling a sub vs function & this method succeeds, the return value will be zero.
' Summarizing: if method fails to execute, Err.LastDLLError value will be non-zero
' If method executes ok, if the return value is zero, method succeeded else return is error code
' Parameters:
' InterfacePointer. A pointer to an object/class, i.e., ObjPtr(IPicture)
' Passing invalid pointers likely to result in crashes
' VTableOffset. The offset from the passed InterfacePointer where the virtual function exists.
' The value is in bytes. These offsets are generally in multiples of 4. Value cannot be negative.
' Example: to call IUnknown:Release, CallFunction_COM InterfacePointer, 8&, CR_LONG, CC_STDCALL
'// minimal sanity check for these 3 parameters:
If VTableOffset < 0& Then Exit Function
Dim pIndex As Long, pCount As Long, bRelease As Boolean
Dim vParamPtr() As Long, vParamType() As Integer
Dim vRtn As Variant, vParams() As Variant
Const CallConvention As Long = 4& ' STDCALL
vParams() = FunctionParameters() ' copy passed parameters, if any
On Error Resume Next
If IsEmpty(vParams(0)) Then
pCount = 0
Else
pCount = Abs(UBound(vParams) - LBound(vParams) + 1&)
End If
On Error GoTo 0
If pCount = 0& Then ' no return value (sub vs function)
ReDim vParamPtr(0 To 0)
ReDim vParamType(0 To 0)
Else
ReDim vParamPtr(0 To pCount - 1&) ' need matching array of parameter types
ReDim vParamType(0 To pCount - 1&) ' and pointers to the parameters
For pIndex = 0& To pCount - 1&
vParamPtr(pIndex) = VarPtr(vParams(pIndex))
vParamType(pIndex) = VarType(vParams(pIndex))
Next
End If
' call the function now
pIndex = DispCallFunc(InterfacePointer, VTableOffset, CallConvention, vbLong, _
pCount, vParamType(0), vParamPtr(0), vRtn)
If pIndex = 0& Then ' 0 = S_OK
pvCallFunction_COM = vRtn ' return result
Else
SetLastError pIndex ' set error & return Empty
End If
End Function
**UPDATE: the customer has tested this version on his updated W10 machine and reported that the application works again.
Last edited by Arnoutdv; Aug 15th, 2019 at 07:16 AM.
-
Aug 15th, 2019, 01:02 PM
#13
New Member
Re: Windows August 2019 Update break VB arrays
Quoted below was code that doesn't work:
Code:
Private Data() As Variant
Private Sub Something()
Data = Array() 'Error 5 here!
End Sub
This will work if you start
Code:
Private Data as Variant
However the following will not:
Code:
Private Data As Variant
Private Data2 as Variant
Private Sub Something()
Data = Array()
Data2 = Data 'Error 5 here
End Sub
Any attempt to assign an empty array to a new variant fails. It can be passed by reference to a new procedure as a parameter, but not by value. It doesn't matter how the empty array is produced - e.g. a ParamArray with no parameters can be assigned to a variant but this cannot then be passed to another variant.
-
Aug 15th, 2019, 02:25 PM
#14
New Member
Re: Windows August 2019 Update break VB arrays
I just run into this problem (today, 15th of Aug): assigning implicit empty arrays to variant variables does not work any longer:
Dim Arr as variant
and then
Arr = Array()
causes “invalid procedure call error”
I solved this by assigning empty arrays explictly:
Arr = Array(Empty)
-
Aug 15th, 2019, 02:25 PM
#15
New Member
Re: Windows August 2019 Update break VB arrays
I just run into this problem (today, 15th of Aug): assigning implicit empty arrays to variant variables does not work any longer:
Dim Arr as variant
and then
Arr = Array()
causes “invalid procedure call error”
I solved this by assigning empty arrays explictly:
Arr = Array(Empty)
-
Aug 15th, 2019, 02:55 PM
#16
New Member
Re: Windows August 2019 Update break VB arrays
Array(Empty) is not an empty array. It is an array containing a single element which is Empty.
-
Aug 15th, 2019, 03:30 PM
#17
New Member
Re: Windows August 2019 Update break VB arrays
Solution:
Code:
Private Data As Variant
Private Data2 As Variant
Private Sub Something()
Data = Split("", "|")
Data2 = Data
End Sub
-
Aug 15th, 2019, 03:31 PM
#18
New Member
Re: Windows August 2019 Update break VB arrays
Solution:
Code:
Private Data As Variant
Private Data2 As Variant
Private Sub Something()
Data = Split("", "|")
Data2 = Data
End Sub
-
Aug 15th, 2019, 04:34 PM
#19
New Member
Re: Windows August 2019 Update break VB arrays
And very interesting that it is possible to pass an empty string array to a second variant, but not an empty variant array.
-
Aug 15th, 2019, 06:14 PM
#20
Hyperactive Member
Re: Windows August 2019 Update break VB arrays
I see that the KB lists Windows 7 SP1 as affected. Has anyone run into it there yet?
Edit: OK, I see it listed specifically as part of the August update in KB4512506...
Last edited by ahenry; Aug 15th, 2019 at 06:20 PM.
-
Aug 15th, 2019, 08:49 PM
#21
Re: Windows August 2019 Update break VB arrays
The ParamArray case might be the one most often encountered in legacy code. But a fix for that (if we get one) should address calls to the Array() function as well as other intrinsic functions using variable length parameter lists. Most of those would be unlikely to ever have an empty parameter list though.
-
Aug 16th, 2019, 06:07 AM
#22
Re: Windows August 2019 Update break VB arrays
Btw, what is the diffrence b/n SafeArrayCreateVector() and Array() constructed empty arrays? Flags like FADF_AUTO?
cheers,
</wqw>
-
Aug 16th, 2019, 06:31 AM
#23
Re: Windows August 2019 Update break VB arrays
Originally Posted by wqweto
Btw, what is the diffrence b/n SafeArrayCreateVector() and Array() constructed empty arrays? Flags like FADF_AUTO?
There's nothing wrong with the Right-Hand-Side (the Emtpy-Array-Construction in both cases).
E.g. this code works without problems (printing -1):
Code:
Private Sub Form_Load()
Debug.Print UBound(Array())
End Sub
So, (empty) ParamArrays as well as empty-arrays returning functions are "safe to use directly" (e.g. as a passed argument).
The error only comes into play in assignments, when two conditions are met.
1) the Right-Hand-Side has to be an empty Variant-Array (if the array contains at least one Member, everything's fine)
2) the Left-Hand-Side has to be of Type Variant-Array (normal Variants will work as the LHS-target)
SafeArrayCreateVector works (despite of the above met conditions), because the assignment-code the compiler generates, is different (due to API-calling) from the assigment-code the compiler generates in case of a simple:
Dim Arr(): Arr = Array()
Olaf
Last edited by Schmidt; Aug 16th, 2019 at 06:41 AM.
-
Aug 16th, 2019, 06:42 AM
#24
Re: Windows August 2019 Update break VB arrays
Originally Posted by Schmidt
SafeArrayCreateVector works (despite of the above met conditions), because the assignment-code the compiler generates, is different (due to API-calling) from the assigment-code the compiler generates
I did some tests yesterday
thinBasic Code:
Option Explicit Private Declare Function VariantArray Lib "oleaut32" Alias "SafeArrayCreateVector" ( _ Optional ByVal VT As VbVarType = vbVariant, _ Optional ByVal LB As Long = 0, _ Optional ByVal cElements As Long = 0) As Variant() Private Sub Form_Load() Debug.Print UBound(Test) Debug.Print UBound(Test2) End Sub Private Function Test() As Variant Dim vRet As Variant vRet = Array() Test = vRet ' Err.Number=5, Err.Description=Invalid procedure call or argument End Function Private Function Test2() As Variant Dim vRet As Variant vRet = VariantArray() Test2 = vRet ' Works End Function
Didn't peek at the disassembly but the line the error is generated looks the same in Test vs Test2 -- it has to be flags in vRet IMO
cheers,
</wqw>
-
Aug 16th, 2019, 06:52 AM
#25
New Member
Re: Windows August 2019 Update break VB arrays
The error also occurs when
1) the right hand side is a variant to which an empty Variant array (e.g. Array()) has already been assigned.
2) the left hand side is a normal Variant (not an array).
The construct Array() with no parameters is incredibly useful. When a varaible is going to be processed as an array, but there are no values, assigning Array() to it means that the loop which processes the array needs no extra code for no value, by looping from the lbound to the ubound the loop exits immediately. ParamArray with no parameters is also a common and useful construct.
-
Aug 16th, 2019, 07:07 AM
#26
Re: Windows August 2019 Update break VB arrays
Originally Posted by wqweto
Code:
Private Function Test2() As Variant
Dim vRet As Variant
vRet = VariantArray()
Test2 = vRet ' Works
End Function
Didn't peek at the disassembly but the line the error is generated looks the same in Test vs Test2 -- it has to be flags in vRet IMO
Interesting code-snippet (the test2 above) - it supports your flags-theory strongly.
FWIW, here's an alternative for your Test1, which works with the Array() function:
Code:
Private Sub Form_Load()
Debug.Print UBound(GetEmptyArray())
End Sub
Function GetEmptyArray() As Variant
GetEmptyArray = Array()
End Function
I guess the above works, because the assignment in the last line of GetEmptyArray() does not really make a copy-attempt.
Olaf
-
Aug 16th, 2019, 07:53 AM
#27
Re: Windows August 2019 Update break VB arrays
Just took a look at the content of the different SafeArray-descriptors with the following code:
Code:
Option Explicit
Private Declare Function GetMem4 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
Private Declare Function VariantArray Lib "oleaut32" Alias "SafeArrayCreateVector" ( _
Optional ByVal VT& = vbVariant, Optional ByVal LB&, Optional ByVal cElements&) As Variant()
Private Sub Form_Load()
Test1 Array()
Test2 VariantArray()
End Sub
Private Sub Test1(Arr)
Dim pSA As Long, DimsAndFlags As Long, pData As Long
GetMem4 ByVal VarPtr(Arr) + 8, pSA
GetMem4 ByVal pSA, DimsAndFlags
GetMem4 ByVal pSA + 12, pData
Debug.Print "Dims:"; DimsAndFlags And &HFFFF&, "Flags: "; Hex(DimsAndFlags \ 65536), "pData:"; pData
End Sub
Private Sub Test2(Arr)
Dim pSA As Long, DimsAndFlags As Long, pData As Long
GetMem4 ByVal VarPtr(Arr) + 8, pSA
GetMem4 ByVal pSA, DimsAndFlags
GetMem4 ByVal pSA + 12, pData
Debug.Print "Dims:"; DimsAndFlags And &HFFFF&, "Flags: "; Hex(DimsAndFlags \ 65536), "pData:"; pData
End Sub
And the result for the VB6-Array() function was:
Dims: 1 ... Flags: 880 ... pData: 0
Whereas for the API-generated empty-array the result was:
Dims: 1 ... Flags: 2880 ... pData: 7266680
So, the Array()-function does have the set Flags-Combination of:
FADF_VARIANT OR FADF_HAVEVARTYPE
Whereas the API-returned SafeArray had an additional Flag set:
FADF_VARIANT OR FADF_HAVEVARTYPE OR FADF_CREATEVECTOR
... as well as apparently an allocation in the pData-Member
Which one of the two things (the additional FADF_CREATEVECTOR = &H2000 or a valid allocation in pData) makes the difference in assignments, we'll still have to figure out.
(my money is on the "valid allocation in pData").
HTH
Olaf
Last edited by Schmidt; Aug 16th, 2019 at 08:06 AM.
-
Aug 16th, 2019, 12:55 PM
#28
Re: Windows August 2019 Update break VB arrays
Originally Posted by Schmidt
(my money is on the "valid allocation in pData")
I agree, but it is only a hunch. This might be a factor in the "security issue" Microsoft tried to patch as well.
-
Aug 16th, 2019, 02:40 PM
#29
Hyperactive Member
Re: Windows August 2019 Update break VB arrays
I ran into this case when looking at the ParamArray problem. In the IDE, it raised Error 5 like the other examples. But when compiled, it just crashes:
Code:
Private Sub Command1_Click()
Dim varReturn As Variant
On Error GoTo Err_Trap
varReturn = DoSomething(1)
varReturn = DoSomething()
Exit Sub
Err_Trap:
MsgBox Err.Number
End Sub
Private Function DoSomething(ParamArray Arguments()) As Variant
DoSomething = DoSomething2(Arguments)
End Function
Private Function DoSomething2(ParamArray Arguments()) As Variant
DoSomething2 = Arguments
End Function
It is trying to copy a one-entry Variant array containing the empty variant array, and causes an access violation if compiled with optimization.
Edit: If I add a minimal error handler to DoSomething2, it prevents the application crash:
Code:
Private Function DoSomething2(ParamArray Arguments()) As Variant
On Error GoTo Err_Trap
DoSomething2 = Arguments
Exit Function
Err_Trap:
Err.Raise Err.Number, Err.Source, Err.Description
End Function
Last edited by ahenry; Aug 16th, 2019 at 03:11 PM.
-
Aug 16th, 2019, 03:52 PM
#30
Frenzied Member
Re: Windows August 2019 Update break VB arrays
So far it seems that the problem is only with Variants or arrays (both?). Anything else?
Thanks all !
-
Aug 16th, 2019, 04:59 PM
#31
Hyperactive Member
Re: Windows August 2019 Update break VB arrays
So far we've seen the error raised by:
Assigning (by value) an empty array (or an array containing an empty array) to a variant, where that empty array comes from:
1) A ParamArray with no arguments, like Array(), but also in user code with ParamArrays
Code:
Dim varValue as Variant
Dim varValue2 as Variant
Dim varArray() as Variant
varValue = Array() ' OK?
varValue2 = varValue ' Nope
varArray = Array() ' Nope
2) An empty array of Object,Class, or public UDT(?) that is (presumably) converted to a variant array
Code:
Dim ObjectArray() As Object
Dim ClassArray() As Class1
varValue = ObjectArray ' Nope
varValue = ClassArray ' Nope
Empty arrays created via SafeArrayCreateVector and Dim varArray() as Variant seem to be OK.
I tested this in VB6, VBA may have different rules.
Last edited by ahenry; Aug 16th, 2019 at 05:10 PM.
-
Aug 16th, 2019, 08:16 PM
#32
New Member
Re: Windows August 2019 Update break VB arrays
Hi, it may not be related to this problem, but since the update on Friday, August 9, the listviews with more than one tab gives the error: 372 failed to load control 'ListView' from mscomctl.ocx.
But instead if there is only one tab, the ListView control is displayed perfectly.
I already uninstalled the updates from friday and re-registered mscomctl.ocx but without success.
-
Aug 16th, 2019, 08:16 PM
#33
New Member
Re: Windows August 2019 Update break VB arrays
Hi, it may not be related to this problem, but since the update on Friday, August 9, the listviews with more than one tab gives the error: 372 failed to load control 'ListView' from mscomctl.ocx.
But instead if there is only one tab, the ListView control is displayed perfectly.
I already uninstalled the updates from friday and re-registered mscomctl.ocx but without success.
-
Aug 16th, 2019, 08:49 PM
#34
Re: Windows August 2019 Update break VB arrays
ListViews have "tabs?" I'm not sure what you meant by that.
-
Aug 17th, 2019, 04:12 AM
#35
Re: Windows August 2019 Update break VB arrays
Originally Posted by MBOS
When reading the latest posts in the linked discussion MS has now put an hotfix for this.
It should be available in the coming days via Microsoft Update Catalog or Windows Server Update Services.
-
Aug 17th, 2019, 05:38 AM
#36
Re: Windows August 2019 Update break VB arrays
Originally Posted by ahenry
So far we've seen the error raised by:
Assigning (by value) an empty array (or an array containing an empty array) to a variant, where that empty array comes from:
1) A ParamArray with no arguments, like Array(), but also in user code with ParamArrays
Code:
Dim varValue as Variant
Dim varValue2 as Variant
Dim varArray() as Variant
varValue = Array() ' OK?
varValue2 = varValue ' Nope
varArray = Array() ' Nope
2) An empty array of Object,Class, or public UDT(?) that is (presumably) converted to a variant array
Code:
Dim ObjectArray() As Object
Dim ClassArray() As Class1
varValue = ObjectArray ' Nope
varValue = ClassArray ' Nope
Empty arrays created via SafeArrayCreateVector and Dim varArray() as Variant seem to be OK.
I tested this in VB6, VBA may have different rules.
I tested these in Office 2019 pro plus/VBA on a new hp device with Windows 10 pro (1903).
The only difference is "varValue2 = varValue".
Code:
Private Data() As Variant
Dim varValue As Variant
Dim varValue2 As Variant
Dim varArray() As Variant
Dim ObjectArray() As Object
Dim ClassArray() As Class1
Private Sub UserForm_Click()
Something
End Sub
Private Sub Something()
'Data = Array()'Error 5 here!
'varValue = Array() ' OK
'varValue2 = varValue ' OK
'varArray = Array() ' 'Error 5 here!
'varValue = ObjectArray ' 'Error 5 here!
'varValue = ClassArray ' 'Error 5 here!
End Sub
Same thing happens with VB6.5 (VBA 2007).
Last edited by TTn; Aug 17th, 2019 at 05:54 AM.
Reason: xtra
-
Aug 17th, 2019, 09:23 AM
#37
New Member
Re: Windows August 2019 Update break VB arrays
Ssorry. I was expressed wrong. I am creating new listviews at runtime that remain as tabs but in reality it is an array of listview objects. When I add the second Listview object, the mentioned error appears. Sorry for my poor English.
-
Aug 17th, 2019, 09:59 AM
#38
Hyperactive Member
Re: Windows August 2019 Update break VB arrays
Originally Posted by TTn
I tested these in Office 2019 pro plus/VBA on a new hp device with Windows 10 pro (1903).
The only difference is "varValue2 = varValue".
Yeah, that surprised me in VB6 too. I bet that there are more variations of assigning / reassigning that I missed.
-
Aug 18th, 2019, 07:38 AM
#39
Member
Re: Windows August 2019 Update break VB arrays
This appears to be a BUG, but it should not be a deprecated feature. I use the latest version of Windows Insider and this problem does not happen.
-
Aug 19th, 2019, 04:54 AM
#40
Re: Windows August 2019 Update break VB arrays
If you don't know where you're going, any road will take you there...
My VB6 love-children: Vee-Hive and Vee-Launcher
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|