⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 VS2005下开发的基于C#版本的GPRS拨号软件,适用用华为和西门子的MODOEM
💻 CS
字号:
/// Copyright(c) Emtronix Inc.
/// 
/// 程序作者:李林 leeleen@emtronix.com
///                leeleen@sjtu.org
///                leeleen@263.net
/// 
/// 最后修改时间:2008-05-23 汶川8级地震余震期间
/// +86-28-86180660
/// 成都英创信息技术有限公司
/// Emtronix是英创公司的注册商标
/// 本程序免费提供给购买英创公司EM9000产品的客户使用
/// 未购买英创公司产品的客户或未获得英创授权的客户不得使用
/// 
/// 本程序注意事项:
/// (1)由于调用WIN32 API RASDial需要用到不安全代码,需要在『项目』—『属性』—『生成』里面选择“允许不安全代码”;
/// (2)上电过程需要调用EM9000_ISA_DLL.dll动态链接库,所以请将该动态链接库下载到目标平台的相关目录里;
/// (3)GPRS模块上电过程在Program.cs里面实现(调用ISA动态链接库),拨号过程在Form1.cs里面实现;
/// (4)本程序上电过程适用于华为GTM9000 GPRS模块。

using System;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace EM9000_GPRS_Dial
{
    public partial class GPRS_FORM : Form
    {
        #region Win32 API RASDial函数声明
        [DllImport("coredll.dll")]
        public static extern uint RasDial(IntPtr dialExtensions, IntPtr phoneBookPath, IntPtr rasDialParam, uint NotifierType, IntPtr notifier, ref IntPtr pRasConn);

        [DllImport("coredll.dll")]
        public static extern uint RasHangUp(IntPtr pRasConn);
        #endregion

        //再次提醒:GPRS模块上电过程在Program.cs里实现,请在Program.cs里参见相关代码
        IntPtr Connect = IntPtr.Zero;

        public GPRS_FORM()
        {
            InitializeComponent();
        }

        private void Exit_button_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Dial_button_Click(object sender, EventArgs e)
        {
            Connect = IntPtr.Zero;

            uint result = myRasDial("GPRS", "", "", out Connect);

            if (result != 0)
            {
                MessageBox.Show("连接失败!");
                RasHangUp(Connect);
            }
            else
                MessageBox.Show("连接成功!");
        }

        private void Hang_button_Click(object sender, EventArgs e)
        {
            if (RasHangUp(Connect) == 0)
            {
                MessageBox.Show("挂断成功!");
            }
            else
                MessageBox.Show("挂断失败!");
        }

        unsafe public static uint myRasDial(string EntryName, string UserName, string Password, out IntPtr RasConn)
        {
            /*EntryName ,UserName,Password - same as in RASDIALPARAMS structure (see MSDN)*/
            uint r = 0;
            RasConn = IntPtr.Zero;
            byte[] bRASDIALPARAMS = new byte[1464];
            fixed (byte* pAddr = bRASDIALPARAMS)
            {
                byte* pCurrent = pAddr;
                Marshal.WriteInt32((IntPtr)pCurrent, bRASDIALPARAMS.Length);
                pCurrent += 4;
                foreach (byte b in Encoding.Unicode.GetBytes(EntryName))
                {
                    Marshal.WriteByte((IntPtr)pCurrent, b);
                    pCurrent++;
                }
                pCurrent = pAddr + 0x192;//0x192 - offset for RASDIALPARAMS.UserName
                foreach (byte b in Encoding.Unicode.GetBytes(UserName))
                {
                    Marshal.WriteByte((IntPtr)pCurrent, b);
                    pCurrent++;
                }
                pCurrent = pAddr + 0x394;//0x394 - offset for RASDIALPARAMS.Password
                foreach (byte b in Encoding.Unicode.GetBytes(Password))
                {
                    Marshal.WriteByte((IntPtr)pCurrent, b);
                    pCurrent++;
                }
                r = RasDial(IntPtr.Zero, IntPtr.Zero, (IntPtr)pAddr, 0, IntPtr.Zero, ref RasConn);
            }
            return r;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -