搜索
bottom↓
回复: 7

C# EZ2000 及 OF863型条码打印机 调用DLL

[复制链接]

出50入0汤圆

发表于 2011-8-15 17:22:40 | 显示全部楼层 |阅读模式
C#  EZ2000 及  OF863型条码打印机  调用DLL

public class TmPrint_TRACE
    {

        [DllImport("TRACE.DLL")]
        public static extern void openport(string com_port);
        [DllImport("TRACE.DLL")]
        public static extern int isready();
        [DllImport("TRACE.DLL")]
        public static extern void sendcommand(string c);
        [DllImport("TRACE.DLL")]
        public static extern void ecTextOut(int x, int y, int h, string font, string s);
        [DllImport("TRACE.DLL")]
        public static extern void closeport();

        public TmPrint_TRACE()
        {
        }
        public void DLLopenport(string com_port)
        {
            openport(com_port);
        }
        public int DLLisready()
        {
            return isready();
        }
        public void DLLsendcommand(string c)
        {
            sendcommand(c);
        }
        public void DLLecTextOut(int x, int y, int h, string font, string s)
        {
            ecTextOut(x, y, h, font, s);

        }
        public void DLLcloseport()
        {
            closeport();
        }

    }

public class TmPrint_ez2000
    {

        [DllImport("ez2000.DLL")]
        public static extern void openport(string com_port);
        [DllImport("ez2000.DLL")]
        public static extern int isready();
        [DllImport("ez2000.DLL")]
        public static extern void sendcommand(string c);
        [DllImport("ez2000.DLL")]
        public static extern void ecTextOut(int x, int y, int h, string font, string s);
        [DllImport("ez2000.DLL")]
        public static extern void closeport();

        public TmPrint_ez2000()
        {
        }
        public void DLLopenport(string com_port)
        {
            openport(com_port);
        }
        public int DLLisready()
        {
            return isready();
        }
        public void DLLsendcommand(string c)
        {
            sendcommand(c);
        }
        public void DLLecTextOut(int x, int y, int h, string font, string s)
        {
            ecTextOut(x, y, h, font, s);

        }
        public void DLLcloseport()
        {
            closeport();
        }



    }

    public class OF863_Tmprint
    {
        public byte TmSw;
        public TmPrint_ez2000 Tm_ez2000;
        public TmPrint_TRACE Tm_Trace;

        public OF863_Tmprint()
        {
            Tm_ez2000 = new TmPrint_ez2000();
            Tm_Trace = new TmPrint_TRACE();
            TmSw = 0;
        }
        public void Init(byte i)
        {
            TmSw = i;
        }
        public void openport_EZ1100(string com_port)
        {
            TmSw = 1;
            Tm_ez2000.DLLopenport(com_port);

        }
        public void openport_of863(string com_port)
        {
            if (com_port == "6")//USB接口
                TmSw = 1;
            else
                TmSw = 0;

            switch (TmSw)
            {
                case 0: Tm_Trace.DLLopenport(com_port);
                    break;

                case 1: Tm_ez2000.DLLopenport(com_port);
                    break;
            }
        }
        public void closeport()
        {
            switch (TmSw)
            {
                case 0: Tm_Trace.DLLcloseport();
                    break;

                case 1: Tm_ez2000.DLLcloseport();
                    break;
            }
        }

        public int isready()
        {

            int r = 0;
            switch (TmSw)
            {
                case 0: r = Tm_Trace.DLLisready();
                    break;

                case 1: r = Tm_ez2000.DLLisready();
                    break;
            }
            return r;
        }
        public void sendcommand(string c)
        {
            switch (TmSw)
            {
                case 0: Tm_Trace.DLLsendcommand(c);
                    break;

                case 1: Tm_ez2000.DLLsendcommand(c);
                    break;
            }
        }
        public void ecTextOut(int x, int y, int h, string font, string s)
        {
            switch (TmSw)
            {
                case 0: Tm_Trace.DLLecTextOut(x, y, h, font, s);
                    break;

                case 1: Tm_ez2000.DLLecTextOut(x, y, h, font, s);
                    break;
            }

        }

    }

出50入0汤圆

 楼主| 发表于 2011-8-15 17:25:27 | 显示全部楼层
回复【楼主位】zhq0571  
-----------------------------------------------------------------------

条码打印使用范例

    public void tmprint(string RF,String intm, String dm, String dispp, bool debug)
        {
            /*
            ^Q19,3  标签高度、标签间距
            ^W54        宽度
            ^E12        停歇点设定
            ^H12        打印明暗度
            ^P1        打印张数
            ^S2        速度
            ^C1        复印张数
            ^R1        左边界起印点
            ^O0        自动剥纸
            ^D0        裁刀
            ~Rx        将整张标签转向180,x为标签宽度(1-104),x>104时为转回原处
            ^L        标签起始符,说明以下开始标签,内容。
            Dy2-me-dd
            Th:m:s
            BA,26,13,2,5,100,0,1,a01000001
            B标签种类,左下角水平位,左下角垂直位,条码窄度,条码宽度,条码高度,条码旋转度,
            码文是否显示,条码数据。
            E

            new:

            9. ecTextOutR(x,y,b,c,d,e,f,g)
            功能說明: 指定True Type字型作為輸出文字的字型,並提供字型旋轉角度的
            設定
            輸入參數: x:(數值)設定文字所在位置的X軸座標(dots)
            y:(數值)設定文字所在位置的Y軸座標(dots)
            b:(數值)設定文字的高度
            c:(字串)指定所使用的字型名稱
            d:(字串)所要列印的文字資料
            e:(數值)設定文字寬度(預設值=0)
            f :(數值)設定文字線條粗細(預設值=40,容許調整值為 0~100)
            g : (數值)輸出文字的旋轉角度:
            0(旋轉零度), 90(旋轉90度), 180 (旋轉180度)和 270(旋轉270
            度)
            4
            傳回值: 1 = (數值) 成功
            0 = (數值) 失敗

            */







            string disp = ""; ;
            string[] tm ;
            tm = new string[20];
            tm[0] = "^Q" + this.numericUpDown_标签高度.Value.ToString() + "," + numericUpDown_标签间距.Value.ToString();
            tm[1] = "^W" + this.numericUpDown_标签宽度.Value.ToString() ;
            tm[2] = "^E" + this.numericUpDown_停歇点.Value.ToString();
            tm[3] = "^H" + this.numericUpDown_明暗度.Value.ToString();
            tm[4] = "^P" + this.numericUpDown_打印张数.Value.ToString();
            tm[5] = "^S" + this.numericUpDown_打印速度.Value.ToString();
            tm[6] = "^C" + this.numericUpDown_复制张数.Value.ToString() ;
            tm[7] = "^R" + this.numericUpDown_左边界.Value.ToString() ;
            tm[8] = "^O0";
            tm[9] = "^D0";
            tm[10] = "~R200";
            tm[11] = "^L";
            tm[12] = "BA," + this.numericUpDown_条码坐标X.Value.ToString() + "," + this.numericUpDown_条码坐标Y.Value.ToString() + "," + this.numericUpDown_条码细线宽.Value.ToString() + "," + this.numericUpDown_条码粗线宽.Value.ToString();
            tm[12] += "," + this.numericUpDown_条码高度.Value.ToString() + ",0,0," + intm;
            tm[13] = this.numericUpDown_题名坐标X.Value.ToString();
            tm[14] = this.numericUpDown_题名坐标Y.Value.ToString();
            tm[15] = this.numericUpDown_题名高度.Value.ToString();

            if (this.comboBox_题名字体.SelectedIndex < 0) comboBox_题名字体.SelectedIndex = 0;

            tm[16] = comboBox_题名字体.Text;

            if (this.comboBox_输出方式.SelectedIndex < 0) comboBox_输出方式.SelectedIndex = 2;

            if (debug) MessageBox.Show("输出类别:" + comboBox_输出方式.SelectedIndex.ToString());




            switch (comboBox_TMJ_SW.SelectedIndex)
            {
                case 0:
                    apps.BASE.TM_OF863.openport_of863(comboBox_输出方式.SelectedIndex.ToString());
                    break;

               
               
                default:
                case 1: apps.BASE.TM_OF863.openport_EZ1100(comboBox_输出方式.SelectedIndex.ToString());
                    break;

            
            }



            if (apps.BASE.TM_OF863.isready() == 0)
            {
                MessageBox.Show("打印机未准备好!请重试。");
            }
            else
            {
                for (int i = 0; i < 13; i++)
                {
                    apps.BASE.TM_OF863.sendcommand(tm);
                    disp =  disp + tm + "\n";
                }

                 //String tmdm = "条码" + intm + " 档号" + dm;
                 string tmdm = "" + intm + " " + dm;
                 if (checkBox_档号在题名前.Checked)
                 {
                     tmdm = "" + intm;// + " " + dm;
                     dispp = dm + "   " + dispp;
                 }
                 else
                 {
                    tmdm = "" + intm + " " + dm;
                 }


                //apps.BASE.TM_OF863.ecTextOut(2, 2, int.Parse(tm[15]), tm[16], tmdm);
                int tmdm_x = int.Parse(this.numericUpDown_条码坐标X.Value.ToString());
                int tmdm_y = int.Parse(this.numericUpDown_条码坐标Y.Value.ToString())-30;

                if (tmdm_y < 5) tmdm_y = 5;
                apps.BASE.TM_OF863.ecTextOut(tmdm_x, tmdm_y, 25, tm[16], tmdm + "   [" + RF + "]");
                //int tmdh_y =int.Parse( this.numericUpDown_条码坐标Y.Value.ToString()) + int.Parse(this.numericUpDown_条码高度.Value.ToString()) + 10;
                //apps.BASE.TM_OF863.ecTextOut(int.Parse(this.numericUpDown_条码坐标X.Value.ToString()), tmdh_y, 25, tm[16], tmdm);//条码与档号
                //apps.BASE.TM_OF863.ecTextOut(int.Parse(tm[13]), int.Parse(tm[14]), int.Parse(tm[15]), tm[16], dispp);
}

出50入0汤圆

 楼主| 发表于 2011-8-15 17:29:05 | 显示全部楼层
c#  调用批处理   
     public void CMD(string disp,string k)
        {
            if (string.IsNullOrWhiteSpace(k) == false)
            {
                //System.Diagnostics.Process.Start("cmd.exe", "/C " + k);
                Form_progress.Showdisp(disp, 3);
                System.Diagnostics.Process P = new System.Diagnostics.Process();
                P.StartInfo.FileName = "cmd.exe";
                P.StartInfo.Arguments = "/C " + k;
                P.StartInfo.UseShellExecute = false;
                P.StartInfo.CreateNoWindow = true;
                P.StartInfo.RedirectStandardInput = true;
                P.StartInfo.RedirectStandardOutput = true;
                P.StartInfo.RedirectStandardError = true;
                P.Start();
                Form_progress.ActiveForm.Hide();
                Form_progress.ShowdispD(disp + ":" + P.StandardOutput.ReadToEnd(), 1);
            }
        
        }

出50入0汤圆

 楼主| 发表于 2011-8-15 17:31:16 | 显示全部楼层
C#  DataTable 数据导出

        public bool SaveFP2toExcel(string Path,DataTable T,string tn)
        {
                                 
                            //Path = F.FileName;
                            if (File.Exists(Path)) File.Delete(Path);

try
{

    //     int ID = 0;
    //string Name = "测试";
    string FileName = Path;
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
    OleDbConnection conn = new OleDbConnection(strConn);
    conn.Open();
    System.Data.OleDb.OleDbCommand cmd=new OleDbCommand ();
    cmd.Connection =conn;
    //cmd.CommandText ="UPDATE [sheet1$] SET 姓名='2005-01-01' WHERE 工号='日期'";
    //cmd.ExecuteNonQuery ();
     /*
    for(int i=0;i
    {
    if(fp2.Sheets [0].Cells[i,0].Text!="")
    {
      cmd.CommandText ="INSERT INTO [sheet1$] (工号,姓名,部门,职务,日期,时间) VALUES('"+fp2.Sheets [0].Cells[i,0].Text+ "','"+
      fp2.Sheets [0].Cells[i,1].Text+"','"+fp2.Sheets [0].Cells[i,2].Text+"','"+fp2.Sheets [0].Cells[i,3].Text+
      "','"+fp2.Sheets [0].Cells[i,4].Text+"','"+fp2.Sheets [0].Cells[i,5].Text+"')";
      cmd.ExecuteNonQuery ();
    }
    }*/
    //建立表结构
    Form_progress FP = new Form_progress();
    FP.Text = " 数据导出到EXCLE中 ";
    FP.Show();
    FP.Disp("正在准备数据...",0);
    OleDbParameter[] parm = new OleDbParameter[T.Columns.Count];
    string[] P = new string[T.Columns.Count];
   int plen=0;
    for (int i = 0; i < T.Columns.Count; i++)
    {
        if (T.Columns.ToString().IndexOf("ID") < 0)
        {
            P[plen++] = T.Columns.ToString();
        }
   
    }

    string CREA_str = "["+P[0] + "]   varchar";// +T.Columns[0].DataType.ToString();
    string INST_str = "?";
    parm[0] = new OleDbParameter("@P0", OleDbType.VarChar);
    cmd.Parameters.Add(parm[0]);
    for (int i = 1; i < plen; i++)
    {
        CREA_str = CREA_str + ", [" + P + "] varchar ";// +T.Columns.DataType.ToString();
        INST_str = INST_str + ",?";// +i.ToString();
    parm = new OleDbParameter("@P"+i.ToString(), OleDbType.VarChar);
    cmd.Parameters.Add(parm);

    }
    cmd.CommandText = @"CREATE TABLE "+tn+"("+ CREA_str +")";

     //  cmd.CommandText = @"CREATE TABLE Sheet1(档号 varchar  ,  题名 varchar)";
    cmd.ExecuteNonQuery();
   
    //建立插入动作的Command
    //cmd.CommandText = "INSERT INTO Sheet1(" + ID + "," + Name + ")";
    //parm[0] = new OleDbParameter("@Id", OleDbType.VarChar);
    //cmd.Parameters.Add(parm[0]);
    //parm[1] = new OleDbParameter("@Company", OleDbType.VarChar);
    //cmd.Parameters.Add(parm[1]);
    //遍历DataTable将数据插入新建的Excel文件中
    FP.Disp("正在写入数据...",0);
    cmd.CommandText = "INSERT INTO "+tn+"  VALUES(" + INST_str + ")";
     for (int i = 0; i < T.Rows.Count; i++)
    {
      //  parm[0].Value = i + 1;
        for (int j = 0; j < plen; j++)
        {
            parm[j].Value = T.Rows[P[j]];
        }
        cmd.ExecuteNonQuery();
        byte r = FP.Disp("正在写入数据 " + i.ToString() + "条", i * 100 / T.Rows.Count);
        if (r == 2) break;
        
    }
     FP.Close();

    conn.Close ();

    return true;
}
catch(System.Data.OleDb.OleDbException ex)
{
    MessageBox.Show("写入Excel发生错误:"+ex.Message );
}
return false;
}

出50入0汤圆

 楼主| 发表于 2011-8-15 17:34:15 | 显示全部楼层
C#  使用SQL导入导出DBF文件

        public void SQL_DBF_OUT(string Table)
        {
           SaveFileDialog  F = new SaveFileDialog();
            F.FileName = Table+".DBF";
            //  openFileDialog1.InitialDirectory = "c:\\" ;
            F.Filter = "DBF files (*.DBF)|*.DBF|All files (*.*)|*.*";
            F.FilterIndex = 1 ;
            F.RestoreDirectory = true ;

            if (F.ShowDialog() == DialogResult.OK)
            {
                string DBFPATH = System.IO.Path.GetDirectoryName(F.FileName);
                string DBF = System.IO.Path.GetFileNameWithoutExtension(F.FileName);
                string S = @"insert into
openrowset('MICROSOFT.JET.OLEDB.4.0','dBase IV;DATABASE=" + DBFPATH + "','select * from [" + DBF + "]') select * from AAA.dbo.BBB";
                apps.Query_exe(S);
            }
        }
        public void SQL_DBF_NEW(string Table)
        {
            OpenFileDialog F = new OpenFileDialog();
            F.FileName = Table + ".DBF";
            //  openFileDialog1.InitialDirectory = "c:\\" ;
            F.Filter = "DBF files (*.DBF)|*.DBF|All files (*.*)|*.*";
            F.FilterIndex = 1;
            F.RestoreDirectory = true;

            if (F.ShowDialog() == DialogResult.OK)
            {
                string DBFPATH = System.IO.Path.GetDirectoryName(F.FileName);
                string DBF = System.IO.Path.GetFileNameWithoutExtension(F.FileName);
                string S = @"select * into "+DBF+@" from  openrowset('MICROSOFT.JET.OLEDB.4.0',
                'dBase III;DATABASE="+DBFPATH+"','select * from ["+DBF+"]') " ;
                //apps.Query_exe(S);
                if (apps.Query_exe(S) >= 0) MessageBox.Show(" 成功 从表[" + F.FileName + "]中的新建表并导入数据!");
            }


        }

        public void SQL_DBF_IN(string Table)
        {

            OpenFileDialog F = new OpenFileDialog();
            F.FileName = Table + ".DBF";
            //  openFileDialog1.InitialDirectory = "c:\\" ;
            F.Filter = "DBF files (*.DBF)|*.DBF|All files (*.*)|*.*";
            F.FilterIndex = 1;
            F.RestoreDirectory = true;

            if (F.ShowDialog() == DialogResult.OK)
            {
                string DBFPATH = System.IO.Path.GetDirectoryName(F.FileName);
                string DBF = System.IO.Path.GetFileNameWithoutExtension(F.FileName);
                string S = " insert into " + Table + @" select * from openrowset('MICROSOFT.JET.OLEDB.4.0',
                 'dBase III;;DATABASE=" + DBFPATH + "','select * from [" + DBF + "]')";

                //apps.Query_exe(S);
                if (apps.Query_exe(S) >= 0) MessageBox.Show(" 成功 导入表[" + Table + "]中的数据!");
            }


        }

        /*一、SQL导出DBF文件(dBase文件已经存在):
         *
insert into
openrowset('MICROSOFT.JET.OLEDB.4.0','dBase III;DATABASE=d:','select * from [示例.dbf]')
select * from AAA.dbo.BBB

*******************************************************************************
二、SQL导入DBF文件(SQL表文件已经存在):
insert into AAA.dbo.BBB select * from
openrowset('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;DATABASE=d:','select * from [示例.dbf]')

*******************************************************************************
三、SQL导入DBF文件(SQL表文件不存在,生成新表):
select * into 新表 from
openrowset('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;DATABASE=d:','select * from [示例.dbf]')

出50入0汤圆

 楼主| 发表于 2011-8-15 17:36:30 | 显示全部楼层
c#  超高频读卡器915的DLL驱动调用


    public class Rfid_915
    {
        //short __declspec(dllexport) __stdcall CommOpen (HANDLE * hCom, char *com_port);
        //short __declspec(dllexport) __stdcall CommClose (HANDLE hCom);
        //short __declspec(dllexport) __stdcall OpenReader (HANDLE *hCom, unsigned char LinkType,char *com_port);
        //short __declspec(dllexport) __stdcall CloseReader (HANDLE hCom);
        //short __declspec(dllexport) __stdcall SetBaudRate(HANDLE hCom, USHORT BaudRate);
        //short __declspec(dllexport) __stdcall ResetReader (HANDLE hCom);
        //short __declspec(dllexport) __stdcall MultipleTagIdentify(HANDLE hCom, unsigned int TagType, unsigned char * Count,TagIds *value);
        //short __declspec(dllexport) __stdcall MultipleTagIdentifyEx(HANDLE hCom, unsigned int TagType, unsigned char * Count,TagIds *value);
        //extern "C" int _stdcall DataOut(HANDLE hDevice,BYTE pipenum1, BYTE *data, DWORD &lenBytes)
        //public static extern int DataOut(IntPtr hDevice, byte pipenum1, byte[] data, ref int lenBytes);
        /*

        C#调用VC的DLL的接口函数参数类型转换一览表

        handle---------IntPtr

        hwnd-----------IntPtr

        char *----------string

        int * -----------ref int

        int &-----------ref int

        void *----------IntPtr

        unsigned char *-----ref byte

        Struct需要在C#里重新定义一个Struct

        CallBack回调函数需要封装在一个委托里,delegate static extern int FunCallBack(string str);

        注意在每个函数的前面加上public static extern +返回的数据类型,如果不加public ,函数默认为私有函数,调用就会出错。
         */
        //public struct TagIds
        //{
        //  public byte TagType;
        //public byte AntNum;
        //public unsafe fixed byte TIDS[20];
        //}


       // [DllImport("Reader.dll")]
        //public static extern byte CommOpen(ref IntPtr hCom, string com_port);
        //[DllImport("Reader.dll")]
        //public static extern byte CommClose(IntPtr hCom);
        [DllImport("Reader.dll")]
        public static extern byte OpenReader(ref IntPtr hCom, byte LinkType, string com_port);
        [DllImport("Reader.dll")]
        public static extern byte CloseReader(IntPtr hCom);
        [DllImport("Reader.dll")]
        public static extern byte SetBaudRate(IntPtr hCom, ushort BaudRate);
        [DllImport("Reader.dll")]
        public static extern byte BeepControl(IntPtr hCom, byte ControlType);
        [DllImport("Reader.dll")]
        public static extern byte ResetReader(IntPtr hCom);
        [DllImport("Reader.dll")]
        public static extern byte MultipleTagIdentify(IntPtr hCom, int TagType, ref byte Count, byte[] TIDS);
        [DllImport("Reader.dll")]
        public static extern byte MultipleTagIdentifyEx(IntPtr hCom, int TagType, ref byte Count, byte[] TIDS);
        [DllImport("Reader.dll")]
        public static extern byte StopRFwork(IntPtr hCom);


        //short NfcStopRFwork(HANDLE hCom)

        IntPtr hCom;
        public string ReadStat;
        public string kh;
        public byte Count;
        public byte[] TIDS = new byte[1400];
        public bool isOpen;
        byte comm_sw;
        System.Threading.Mutex Run = new System.Threading.Mutex();
        public Rfid_915()
        {
            // TIDS = new byte[800];
            //TIDS = new byte[200];
            // for (int i = 0; i < 100; i++)
            {
                // TIDS.Ids = "0000000000";
                //TagIds.Ids = new byte[8];
                //  TIDS.ZIds =  new  byte[20];

            }
            isOpen = false;
        }

      /*  public byte CommOpen(string com_port)
        {
            Run.WaitOne();
            byte r = CommOpen(ref hCom, com_port);
            if (r == 0) isOpen = true;
            Run.ReleaseMutex();
            return r;
        }

        public byte CommClose()
        {
            byte r;
            Run.WaitOne();
            r = CommClose(hCom);
            if (r == 0) isOpen = false;
            Run.ReleaseMutex();
            return r;
        }*/

        public byte OpenReader(byte sw, string com_port)
        {
            byte r;
            try
            {
                Run.WaitOne();
                r = OpenReader(ref hCom, sw, com_port);//为1代表串口,为2代表网络接口,为3代表USB接口。
                if (r == 0) isOpen = true;
                if (sw == 1)
                {
                    if (r == 0) isOpen = true;
                    SetBaudRate(hCom, 4);
                }
                comm_sw = sw;
            }
            finally
            {
                Run.ReleaseMutex();
            }
            return r;
        }

        public byte CloseReader()
        {
            byte r;
            try
            {
                Run.WaitOne();
                if (comm_sw == 1)
                {
                    SetBaudRate(hCom, 0);
                }
                r = CloseReader(hCom);
                if (r == 0) isOpen = false;
            }
            finally
            {
                Run.ReleaseMutex();

出0入0汤圆

发表于 2013-12-2 22:40:47 | 显示全部楼层
学习了,这么多高手,有没有谁有打印表格的程序,求大神赐教
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 01:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表