none
疑問:NET CF的目標版本不支援晚期繫結 RRS feed

  • 問題

  • 諸位先進

    小弟在觀摩他人的程式碼並修改至PPC中時發現出現以下錯誤

    錯誤訊息"NET Compact Framework 的目標版本不支援晚期繫結 

    使用軟體為VS2005上的 VB.NET  .NET CF 2.0

    不知可否解決呢  感謝

    ----------------------------------------------------------

    MSDN上的解釋 :

    您所使用的 .NET Compact Framework 版本不支援晚期繫結。

    錯誤 ID:BC30762

    若要更正這個錯誤

    1. 請避免在宣告為物件的變數上呼叫函式、子函式 (Sub) 或屬性 (Property)。

    2. 請避免將物件變數當成陣列。

    3. 避免使用目錄成員存取含有物件變數的運算式。

    ---------------------------------------------------------

    ClientList 放置的是  ClientClass 的物件 包含多種方法及欄位

     部份程式碼為

       Private ClientList As New System.Collections.ArrayList

    #Region "Close"

            Public Sub Close()

                Dim Client As ClientClass
                Do While ClientList.Count <> 0
                    ClientList.Item(0).Disconnect()
                Loop

                Server.Stop()
                ClientList.Clear()
                If Not Thread Is Nothing Then Thread.Abort()

                Try
                    RaiseEvent Closed()
                Catch
                End Try

            End Sub

    #End Region

    Public Sub KickClient(ByVal ClientID As String)

                If ClientID.Length = 32 Then
                    Dim i As Integer
                    For i = 0 To ClientList.Count - 1
                        If ClientList.Item(i).ID = ClientID Then
                            ClientList.Item(i).Disconnect()
                            Exit For
                        End If
                    Next
                End If

            End Sub

    2006年8月15日 下午 04:51

解答

  • ....

    解決方法不是已經告訴你了嗎:

    若要更正這個錯誤

    1. 請避免在宣告為物件的變數上呼叫函式、子函式 (Sub) 或屬性 (Property)。

    2. 請避免將物件變數當成陣列。

    3. 避免使用目錄成員存取含有物件變數的運算式。

    2006年8月16日 上午 02:40
    版主

所有回覆

  • ....

    解決方法不是已經告訴你了嗎:

    若要更正這個錯誤

    1. 請避免在宣告為物件的變數上呼叫函式、子函式 (Sub) 或屬性 (Property)。

    2. 請避免將物件變數當成陣列。

    3. 避免使用目錄成員存取含有物件變數的運算式。

    2006年8月16日 上午 02:40
    版主
  • 小弟不才 功力尚淺

    在此例中

    如果Client 不超過五個 要如何才能將這些client不放到陣列中?? 以避免晚期繫結的發生呢

    是要先宣告嗎?

    感謝

     

    2006年8月21日 下午 04:53
  • 直接宣告五個 Client 變數,再依序操作 ...
    2006年8月22日 上午 07:09
    版主
  • 先進您好

    小弟的先宣告五個clientclass物件 如下

            Private client_1 As New ClientClass(Nothing)
            Private client_2 As New ClientClass(Nothing)
            Private client_3 As New ClientClass(Nothing)
            Private client_4 As New ClientClass(Nothing)
            Private client_5 As New ClientClass(Nothing)

    想要等接收到到AcceptTcpClient再設定參數

     If client_1.ID = Nothing Then
                            client_1 = New ClientClass(Server.AcceptTcpClient)
                        ElseIf client_2.ID = Nothing Then
                            client_2 = New ClientClass(Server.AcceptTcpClient)
                        ElseIf client_3.ID = Nothing Then
                            client_3 = New ClientClass(Server.AcceptTcpClient)
                        ElseIf client_4.ID = Nothing Then
                            client_4 = New ClientClass(Server.AcceptTcpClient)
                        ElseIf client_5.ID = Nothing Then
                            client_5 = New ClientClass(Server.AcceptTcpClient)
                        End If

    但clientclass的new() 執行時便會產生錯誤,因為初始未帶入正確參數

    #Region "ClientClass_New"

                Public Sub New(ByVal theClient As TcpClient)

                    Client = theClient
                    ClientStream = Client.GetStream

                    ReadClientStream()

                End Sub

    #End Region

    錯誤訊息如下

    疑難排解例外狀況:System.NullReferenceException

    當您嘗試於不存在的程式碼中參照物件時,就會發生 NullReferenceException。例如,您可能未先使用 New 關鍵字就嘗試使用物件,或嘗試使用值已設定為 null (在 Visual Basic 中為 Nothing) 的物件。

    不知可以如何解決呢??

    修改new? 或是?

    感恩

    在試了一下 

    #Region "ClientClass_New" 弄成多型(應該是這樣說吧)多一個不用傳入參數的

    Public Sub New()

                End Sub

    程式中再重新設定

    If client_1.ID = "" Then
                            client_1 = New ClientClass(Server.AcceptTcpClient)

    這樣便可以的

    自問自答 也感謝先進的提示

    2006年8月22日 下午 05:13