Private Function funSend(ByVal sIP As String, ByVal sSend As String, ByVal sNum As String) As String
        '本函数用于发送读写PLC命令
        'sIP指定远程IP地址,sSend指定要发送的命令正文,sErr返回错误信息
        Try
            Winsock1.RemotePort = 500
            Winsock1.RemoteHost = sIP
            sSend = Chr(2) & sNum & sSend
            sSend = sSend + LRC(sSend) + Chr(3)
            Winsock1.SendData(sSend)        Catch ex As Exception
            funSend = ex.Message
        End Try
    End Function
警告:函数“funSend”并非在所有代码路径上都返回值。当使用结果时,可能会在运行时发生空引用异常。
该怎么解决呢?

解决方案 »

  1.   

    在End Try之后再增加一个return,返回正确信息。在catch里面返回错误信息
      

  2.   

    并非在所有代码路径上都返回值,没有return返回值
    发生空引用的地方加上判断
    对VB不是很熟悉,感觉应该是这么搞
      

  3.   

    funSend是有返回string类型的方法,但是你没有返回值
      

  4.   


    Private Function funSend(ByVal sIP As String, ByVal sSend As String, ByVal sNum As String) As String
      '本函数用于发送读写PLC命令
      'sIP指定远程IP地址,sSend指定要发送的命令正文,sErr返回错误信息
      Try
      Winsock1.RemotePort = 500
      Winsock1.RemoteHost = sIP
      sSend = Chr(2) & sNum & sSend
      sSend = sSend + LRC(sSend) + Chr(3)
      Winsock1.SendData(sSend)
      funSend = "这里想写什么写什么,成功可以返回1"  Catch ex As Exception
      funSend = ex.Message
      End Try
      End Function就可以了
      

  5.   

    谢谢楼上各位回复,我已经修改了,可是下面一段子程序为什么出现同样的警告呢?我觉得都有返回值啊,请大家再帮忙看看啊,谢谢了
    Public Function ReceiveFatek(ByVal sInfo As String) As String
            Try
                Dim i As Integer
                i = Mid(sInfo, 4, 2)
                If Mid(sInfo, 6, 1) <> "0" Then
                    ReceiveFatek = "PLC返回错误信息,操作失败!"
                    Exit Function
                End If
                Select Case i
                    Case Is = 40
                        If Mid(sInfo, 8, 1) = "0" Then ReceiveFatek = "PLC处于停止状态"
                        If Mid(sInfo, 8, 1) = "1" Then ReceiveFatek = "PLC处于运行状态"
                    Case Is = 41
                        ReceiveFatek = "PLC运行状态改变成功"
                    Case Is = 42
                        ReceiveFatek = "PLC操作单点成功"
                    Case Is = 46
                        glngSpeed = CInt("&H" & Mid(sInfo, 11, 4))
                        glngTBstate = Mid(sInfo, 15, 4)
                        ReceiveFatek = "PLC读取成功,速度是" & glngSpeed & _
                                              "同步状态是" & glngTBstate
                    Case Is = 47
                        ReceiveFatek = "PLC写入成功"
                End Select
            Catch ex As Exception
                ReceiveFatek = ex.Message
            End Try
        End Function
      

  6.   

    select case 语句缺少 case else
      

  7.   

    严重怀疑我在CSDN左边树形导航栏中点的 不是 C#
      

  8.   

    谢谢楼上回复,我加了case else,还是出现同样的警告啊,不知道怎么回事啊
      

  9.   

     Case Is = 47
      ReceiveFatek = "PLC写入成功"
     Case Else
      ReceiveFatek = "PLC不明状态"
    End Select
      

  10.   

    在函数第一行加        ReceiveFatek = String.Empty
      

  11.   

    你那个不但要写case else,关键还是  Case Is = 40的时候,你只用了两个判断,如果都不成立,还是没有赋值了
    加一下也行ReceiveFatek = String.Empty
    If Mid(sInfo, 8, 1) = "0" Then ReceiveFatek = "PLC处于停止状态"
    If Mid(sInfo, 8, 1) = "1" Then ReceiveFatek = "PLC处于运行状态"
      

  12.   

    在 ReceiveFatek 定义的地方 把Dim ReceiveFatek As String 改为 Dim ReceiveFatek As String ="" 或者 Dim ReceiveFatek As String =String.Empty 就ok了
      

  13.   

    我说的缺少case else是说你必须在case else中对函数返回值赋值,这样该函数才会在所有可能的路径中都有返回值