标题:模块中选择case语句中运行call命令错误,谁能提供解决方案
只看楼主
rogersgb
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2016-2-3
结帖率:47.37%
已结贴  问题点数:20 回复次数:4 
模块中选择case语句中运行call命令错误,谁能提供解决方案
VB拨号模块中Select选择case语句中运行call命令错误,错误提示:---------------------------
浙江国税VPDN专用拨号软件.exe - 应用程序错误
---------------------------
"0x734747f2" 指令引用的 "0x00000098" 内存。该内存不能为 "written"。

要终止程序,请单击“确定”。
要调试程序,请单击“取消”。
---------------------------
确定   取消   
---------------------------




谁能提供解决方案
搜索更多相关主题的帖子: 解决方案 拨号软件 应用程序 written 浙江 
2016-05-16 12:14
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
得分:7 
Call是调用程序内部的过程、函数的语句,调用外部exe文件,不能使用Call语句,必须使用Shell函数。它的基本要求如下:
Shell("必选参数 字符串,盘符+路径+文件名+扩展名",可选参数 整数,打开窗口的方式:0隐藏,1窗口有焦点原来大小,2显示一个焦点的图标,3有焦点的最大化窗口)
例如:Shell App.Path & "\ABC\浙江国税VPDN专用拨号软件.exe", 1
当然,这个exe文件必须在你的硬盘中,App.Path 是你的程序的绝对路径,包含盘符+路径,\ABC 是你的程序目录下的一个子目录,\浙江国税VPDN专用拨号软件.exe 是这个调用的程序。

[此贴子已经被作者于2016-5-16 13:29编辑过]


请不要选我!!!
2016-05-16 13:23
rogersgb
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2016-2-3
得分:0 
回复 2楼 ZHRXJR
异步拨号模块中   Case RASCS_Connected
       Form1.Label11.Caption = "连接成功!"
= False
= True
call start
    Case RASCS_Disconnected
       Form1.Label11.Caption = "连接已断开!"
End Select

start模块如下

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetIpAddrTable Lib "IPHlpApi" (pIPAdrTable As Byte, pdwSize As Long, ByVal Sort As Long) As Long

'获取IP地址
Private Const MAX_IP = 255

Private Type IPINFO
            dwAddr   As Long    'IP地址
            dwIndex   As Long
            dwMask   As Long    '掩码
            dwBCastAddr   As Long    '广播地址
            dwReasmSize   As Long
            unused1   As Integer
            unused2   As Integer
End Type


Private Type MIB_IPADDRTABLE
            dEntrys   As Long
            mIPInfo(MAX_IP)   As IPINFO
End Type
Private Type IP_Array
            mBuffer   As MIB_IPADDRTABLE
            BufferLen   As Long
End Type
Dim strIP     As String


Private Function ConvertAddressToString(longAddr As Long) As String
    Dim myByte(3)     As Byte
    Dim Cnt     As Long
    CopyMemory myByte(0), longAddr, 4
    For Cnt = 0 To 3
        ConvertAddressToString = ConvertAddressToString + CStr(myByte(Cnt)) + "."
    Next Cnt
    ConvertAddressToString = left$(ConvertAddressToString, Len(ConvertAddressToString) - 1)
End Function
Public Sub Start()

    Dim Ret     As Long, Tel       As Long
    Dim bBytes()     As Byte
    Dim Listing     As MIB_IPADDRTABLE

    On Error GoTo END1
    GetIpAddrTable ByVal 0&, Ret, True

    If Ret <= 0 Then Exit Sub

    ReDim bBytes(0 To Ret - 1) As Byte

    GetIpAddrTable bBytes(0), Ret, False
    CopyMemory Listing.dEntrys, bBytes(0), 4

    For Tel = 0 To Listing.dEntrys - 1
 CopyMemory Listing.mIPInfo(Tel), bBytes(4 + (Tel * Len(Listing.mIPInfo(0)))), Len(Listing.mIPInfo(Tel))
If InStr(1, ConvertAddressToString(Listing.mIPInfo(Tel).dwAddr), "10.26") > 0 Or InStr(1, ConvertAddressToString(Listing.mIPInfo(Tel).dwAddr), "10.6") > 0 Or InStr(1, ConvertAddressToString(Listing.mIPInfo(Tel).dwAddr), "10.86") > 0 Then
 strIP = ConvertAddressToString(Listing.mIPInfo(Tel).dwAddr)
        End If
    Next
Shell "route -p add 100.0.0.0 mask 255.255.255.0 " & strIP, vbHide
    Exit Sub
END1:
    MsgBox "ERROR"
   
End Sub



2016-05-17 08:15
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:7 
这个问题本来想回答的,必竟还是无解。

如果你的工程编译后不是这个程序:浙江国税VPDN专用拨号软件.exe
那你的问题在这个论坛,基本无解。

如果是,那么你检查 CopyMemory 对应的这些参数。
必要时,尽量少用 CopyMemory 这个函数。
CopyMemory 写内存里,没有VB运行库的各种边界检查,很容易导致内存访问违例。

授人于鱼,不如授人于渔
早已停用QQ了
2016-05-17 19:22
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
得分:0 
回复 3楼 rogersgb
已经说过了,exe文件必须是你自己硬盘中的文件,不能是其他地方的,你调用网络中的exe文件,基本不可能。

请不要选我!!!
2016-05-19 00:17



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




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

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