代码如下,短信上行没反应,业务响应包也没出,不知道什么原因,忘能得到帮助。
CallBackProc这个是回调函数,按接口里的说明,我连接成功后,并且接受成功后,如果有人发短信到051683719171这个号码,就会调用CallBackProc这个函数,但是现在试了没反应,不知是何故?这个方法压根就进去。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using FULLTUNNELCONTROLLib;
using System.Runtime.InteropServices;
using System.Threading;namespace qxt
{
    public delegate void CallBack(String BS_flag, String BS_svalue1, String BS_svalue2, String BS_svalue3, String BS_svalue4, String BS_svalue5, String BS_svalue6, String BS_svalue7, String BS_svalue8);    public class Vdata
    {
        public int vt;        public IntPtr pt;
    }
        
    
    public partial class Form1 : Form
    {
        public Form1(){
            InitializeComponent();
        }        private void button1_Click(object sender, EventArgs e)
        {
            FullTunnelServiceControl ctr1 = new FullTunnelServiceControl();            string strControl_type = "connect";
            string strName = "zzywbadsl";
            string strPwd = "1234554321";
            string strSenderr = "051683719171";
            string strServerip = "218.94.58.243";
            string strServerport = "9001";
            string strSendtype = "1";
            string strBackstr = "";                        object hr = ctr1.StartAndManageConnect_User(ref strName, ref strPwd, ref strServerip, ref strServerport);
            if (hr.ToString() == "0") {        //链接成功
                textBox1.Text = "连接认证成功";
            }    
        }        private void button2_Click(object sender, EventArgs e)
        {
            try {
                Thread thread = new Thread(new ThreadStart(SendFromDbThread));
                thread.Start();
            }
            catch (Exception ee){
               MessageBox.Show("创建发送线程失败");
            }            
        }        private static void SendFromDbThread()
        {
            string strControl_type = "send";
            string strName = "zzywbadsl";               //用户名
            string strPwd = "1234554321";                  //密码
            string strSenderr = "051683719171";
            string strServerip = "218.94.58.243";
            string strServerport = "9001";
            string strSendtype = "1";
            string strBackstr = "1";
            string strSourcecode = "051683719171";
            string strDestcode = "13372221206";        //发送的号码
            string strContent="我是杨波,收到短信回个。";
            string strComid="1";
            string strNeedreceipt="1";
            string strAccessNum="0513C00014003";
            string seqID;            FullTunnelServiceControl ctr1 = new FullTunnelServiceControl();
            object oOut = null;
            object hr = ctr1.SendBusinessPkg(ref strControl_type, ref strName, ref strPwd, ref  strSourcecode, 
                                                                ref strDestcode, ref strServerip, ref  strServerport, ref strContent,
                                                                ref strSendtype, ref strComid, ref strNeedreceipt,out seqID);
            if (hr.ToString() == "1"){
                //textBox1.Text = "发送业务包成功" + "     此条短信的SequenceID是:" + seqID;             
                MessageBox.Show("发送业务包成功");
            }
            else {
                //textBox1.Text = "发送业务包失败"+hr.ToString();
                MessageBox.Show("发送业务包fail");
            }
        }        static CallBack ca = new CallBack(Form1.CallBackProc);     //得到函数指针
        uint pCallBack = (uint)(Marshal.GetFunctionPointerForDelegate(ca).ToInt32());        private void button3_Click(object sender, EventArgs e)
        {
            FullTunnelServiceControl ctr1 = new FullTunnelServiceControl();
            object hr = ctr1.StartRecv_User(pCallBack);                     if (hr.ToString() == "0"){
                textBox1.Text = "接收成功";
            }
            else {
                textBox1.Text = hr.ToString();
            }
            
        }        public static void  CallBackProc(String BS_flag, String svalue1, String svalue2, String svalue3, String svalue4, 
                                                        String svalue5, String svalue6, String svalue7, String svalue8)
        {
            MessageBox.Show("进入回调函数里面");
            String msgtemp = "";            if ( BS_flag.CompareTo("4") == 0 ){
                msgtemp += " [业务响应包] SequenceID:"+ svalue1+" MessID:"+svalue2+" STATUS:"+svalue3;
                MessageBox.Show(msgtemp,"业务响应包");
            }
           else if (BS_flag.CompareTo("5") == 0){
               msgtemp += "[上行短信包] SequenceID:" +  svalue1 +"  发送号码:" + svalue2 +"  接收号码:" + svalue3+
                                    "   接收时间:" + svalue4 + "  短信内容:" +svalue5;
                MessageBox.Show(msgtemp,"上行短信包");
            }
            else if (BS_flag.CompareTo("7") == 0){
                msgtemp += "[短信回执包] SequenceID:" + svalue1 + "  MessID:" + svalue2 + "  接收号码:"+ svalue3
                                    + "  发送号码:" + svalue4 + "  提交时间:"+ svalue5 + "  下发时间:" + svalue6 
                                    +"  短信状态:" + svalue7 + "  错误代码:" + svalue8;
                MessageBox.Show(msgtemp, "短信回执包");             
            }
        }
    }
}

解决方案 »

  1.   


    public delegate void CallBack(String BS_flag, String BS_svalue1, String BS_svalue2, String BS_svalue3, String BS_svalue4, String BS_svalue5, String BS_svalue6, String BS_svalue7, String BS_svalue8);static CallBack ca = new CallBack(Form1.CallBackProc);     //得到函数指针
            uint pCallBack = (uint)(Marshal.GetFunctionPointerForDelegate(ca).ToInt32());用这些代码 好像能完成监听
      

  2.   

    先build  然后用build出的文件跑  才能跟进去
      

  3.   

    弱弱的问下,请问是怎么注册的? 运行了 regsvr32 /s 路径  命令啊,在哪个文件夹里可以看到