Dim lHandle(U_NUMITEMS) As System.Array ' 錯誤聲明
lHandle(i) = MyItemServerHandles2(NumItemsW) ' MyItemServerHandles2 是 Integer 陣列
報錯:無法將類型為 System.Int32 的對象強制轉換為類型 System.Array
System.Array 是抽象基類,不能直接作為元素類型。MyItemServerHandles2 實際是 Integer()(即 Int32[])。
Dim lHandle(U_NUMITEMS) As Integer ' 或 As Int32
' 或者
Dim lHandle() As Integer = New Integer(U_NUMITEMS) {}
Private Sub PLC_AsyncWrite(ByVal NumItemsW As Integer, ByRef ItemValuesW() As Object, ByRef MyErrors As Array)
If MyGroup2 Is Nothing OrElse MyGroup2.OPCItems.Count = 0 Then Exit Sub
Dim lHandle(U_NUMITEMS) As Integer
For i = 1 To 30
lHandle(i) = MyItemServerHandles2(NumItemsW) ' 現在類型匹配
MyGroup2.AsyncWrite(1, lHandle(i), ItemValuesW, MyErrors, lTransID_Rd2, lCancelID_Rd2)
Next
End Sub
Option Strict On 可在編譯期捕獲此類類型不匹配。Integer (Int32) 完全足夠。