标题:VB窗体损坏怎么办
只看楼主
leziyi
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2016-10-30
结帖率:85.71%
已结贴  问题点数:30 回复次数:7 
VB窗体损坏怎么办
我在帮同学开发一个防火墙,有一天我按Ctrl+S保存程序,关掉电脑睡觉
第二天起来打开程序提示主窗体加载错误,我点确认,一看工程资源管理器,主窗体不翼而飞,用记事本打开主窗体文件一看,文件空了,但资源管理器里显示有21KB大小
请各位兄弟帮忙解决一下,下附附件:
VB防火墙.zip (7.47 KB)
搜索更多相关主题的帖子: VB 窗体 损坏 打开 资源管理器 
2018-12-05 20:08
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:5 
没办法,FrmMain.frm填充的是全0。
自己开发的,重写也不难吧。

能编个毛线衣吗?
2018-12-05 20:52
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
得分:10 
Ctrl+S 是保存当前活动窗体或模块,Ctrl+V 是保存工程,保存全部窗体模块及工程文件 *.vbp,你是保存了一个窗体或模块,而没有保存工程,因此其他不活动的窗体或模块肯定没有保存。
ClsLog.cls类模块、FrmLog.frm窗体、FrmMain.frm窗体、FrmMenu.frm窗体、FrmOption.frm窗体均没有保存,并且 FrmMain.frm窗体连基本窗体都没有。 可能仅仅保存的是 ModNetstat.bas 模块。
程序文件中的ClsLog.cls类模块、FrmLog.frm窗体、FrmMain.frm窗体、FrmMenu.frm窗体、FrmOption.frm窗体 是以前保存的,有些窗体有一点内容,有些窗体一点内容都没有。
现在没有任何办法恢复,只能重新做了。

请不要选我!!!
2018-12-06 10:43
leziyi
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2016-10-30
得分:0 
顺便帮忙看一下这段代码:
程序代码:

Call GetTcpTable(ByVal0&, cbRequired, 1)


显示错误:用户定义类型不能用
改成ByRef后显示错误:用户类型未定义
2018-12-06 20:51
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
得分:15 
Call GetTcpTable(ByVal0&, cbRequired, 1)
GetTcpTable 可能是一个过程或一个函数,这里是调用这个过程或函数,在调用时的参数是变量名或具体的值,不能在调用时再次声明变量的数据类型。
你这个过程或函数有三个参数 ByVal0&, cbRequired, 1,第一个参数后面带 & 号,系统认为你重新声明变量的数据类型,所以发生错误。ByVal0 是变量名!
由于没有看到你的具体的过程或函数,其他就不清楚了。至于 ByVal 与 ByRef 传递方式是在过程或函数中体现的,不能在调用中体现。

请不要选我!!!
2018-12-07 09:09
leziyi
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2016-10-30
得分:0 
函数声明:
程序代码:

'GetTcpTable函数能返回当前系统中全部有效的 TCP连接

Declare Function GetTcpTable Lib "iphlpapi.dll" (ByRef pTcpTable As MIB_TCPTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long



程序代码:

Call GetTcpTable(ByVal 0&, cbRequired, 1)

2018-12-07 12:41
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
得分:0 

哎,你调用函数的语句估计是错误的,因为函数 GetTcpTable 在声明时有三个参数  pTcpTable 参数的数据类型是:MIB_TCPTABLE,按地址传递的;  pdwSize 参数的数据类型是: Long, 按地址传递的; bOrder 参数的数据类型是: Long,是按值传递的。
而你在调用时,改变了第一个参数的传递方式与数据类型,肯定要发生错误。
我认为应该是这样:
你可以在 API 浏览器 中查询 GetTcpTable 函数的声明语句,但我没有查到API有这个函数,如图:

请不要选我!!!
2018-12-08 09:35
leziyi
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2016-10-30
得分:0 
帮忙看一下:
Private Sub GetTcpDatas()

  Dim tcpt As MIB_TCPTABLE

  Dim TcpRow     As MIB_TCPROW

  Dim Buffer()     As Byte

  Dim LngRequired     As Long

  Dim LngStructureSize     As Long

  Dim LngRows     As Long

  Dim LngCounter     As Long

  Dim strTemps     As String

  Dim ListX     As ListItem

   

  LvwTcpTable.ListItems.Clear

  GetTcpTable tcpt, LngRequired, 1

   

  If LngRequired > 0 Then

          ReDim Buffer(0 To LngRequired - 1) As Byte

          If GetTcpTable(Buffer(0), LngRequired, 1) = ERROR_SUCCESS Then

                  LngStructureSize = LenB(TcpRow)

   

                  '起始的四个字节,是做为表示进入点的数字

                  CopyMemory LngRows, Buffer(0), 4

                  For LngCounter = 1 To LngRows

   

                          '   将上述获得四个字节的相关数据,拷贝到   TcpRow   的结构之中

                          CopyMemory TcpRow, Buffer(4 + (LngCounter - 1) * LngStructureSize), LngStructureSize

                           

                          '   将结果传送到   ListView   之中

                          With TcpRow

                                  Set ListX = ListView1.ListItems.Add(, , GetInetAddrStr(.dwLocalAddr))

                                  ListX.SubItems(1) = ntohs(.dwLocalPort)

                                  ListX.SubItems(2) = GetInetAddrStr(.dwRemoteAddr)

                                  ListX.SubItems(3) = ntohs(.dwRemotePort)

                                  ListX.SubItems(4) = (.dwState)

                                  Select Case .dwState

                                          Case MIB_TCP_STATE_CLOSE_WAIT:         strTemps = "结束等待"

                                          Case MIB_TCP_STATE_CLOSED:                 strTemps = "已结束"

                                          Case MIB_TCP_STATE_CLOSING:               strTemps = "结束中..."

                                          Case MIB_TCP_STATE_DELETE_TCB:         strTemps = "已删除TCB"

                                          Case MIB_TCP_STATE_ESTAB:                   strTemps = "已连接"

                                          Case MIB_TCP_STATE_FIN_WAIT1:           strTemps = "FIN延时处理1"

                                          Case MIB_TCP_STATE_FIN_WAIT2:           strTemps = "FIN延时处理2"

                                          Case MIB_TCP_STATE_LAST_ACK:             strTemps = "上次取得的确认信号"

                                          Case MIB_TCP_STATE_LISTEN:                 strTemps = "监听中..."

                                          Case MIB_TCP_STATE_SYN_SENT:             strTemps = "传送"

                                          Case MIB_TCP_STATE_SYN_RCVD:             strTemps = "数据接收中"

                                          Case MIB_TCP_STATE_TIME_WAIT:           strTemps = "等候中..."

                                  End Select

                                  ListX.SubItems(4) = ListX.SubItems(4) & "(" & strTemps & ")"

                                  strTemps = ""

                          End With

                    

                  Next

            

          End If

  End If

   

  End Sub
---------------------------
Microsoft Visual Basic
---------------------------
编译错误:

ByRef 参数类型不符
---------------------------
确定   帮助   
---------------------------
2018-12-08 11:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491851-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.106255 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved