zoukankan      html  css  js  c++  java
  • C# winform 与 flash as 的交互通讯

    出处:

    http://blog.csdn.net/lifesoftware/article/details/5389265

    http://www.cnblogs.com/naiking/archive/2009/01/14/1375771.html

    1、添加组件
      打开VS2008,工具-选择工具箱项-COM组件,勾选Shockwave Flash Object,确定。

    2、将Flash组件放入窗体中
      将工具箱中的Shockwave Flash Object组件拖放到窗体中,设置其属性。

    3、as代码

    import flash.external.ExternalInterface;

    //向C#发送数据
    if (ExternalInterface.available)
    {
        
    var strResult:String = ExternalInterface.call("userValidate", userid, password);
    }


    //接收C#返回的结果
    if (ExternalInterface.available)
    {
        ExternalInterface.addCallback(
    "userValidate", userValidate);
    }

    //根据C#返回的结果处理
    public function userValidate(str:String):void
    {
        trace(str);
    }

    4、c#代码

    public mainForm()
    {
        InitializeComponent();
        mainFlash.Movie 
    = Application.StartupPath + "\\swf\\DayBook.swf";//设置flash地址
        mainFlash.Menu = false;
        mainFlash.FlashCall 
    += new AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEventHandler(mainFlash_FlashCall);
    }

    private void mainFlash_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
    {
        XmlDocument document 
    = new XmlDocument();
        document.LoadXml(e.request);
        XmlAttributeCollection attributes 
    = document.FirstChild.Attributes;

        
    // 获取函数名
        String command = attributes.Item(0).InnerText;

        
    // 获取参数
        XmlNodeList list = document.GetElementsByTagName("arguments");
        
    int count = list[0].ChildNodes.Count;//参数数量
        string[] arr_paras = new string[count];
        
    //处理参数
        for (int i = 0; i < count; ++i)
        {
            arr_paras[i] 
    = list[0].ChildNodes[i].InnerText.ToString();
        }

        
    switch (command)
        {
           
    case "userValidate":
                 userValidate(arr_paras, 
    "userValidate");
                 
    break;
           
    case "getPeopleList":
                 getPeopleList(arr_paras, 
    "getPeopleList");
                 
    break;
        
         }
    }

    //C#传给Flash的值
    private void callFunction(string funName, string arg)
    {
        
    //funName:调用as中的函数
        
    //arg:参数
        mainFlash.CallFunction("<invoke name=\"" + funName + "\" returntype=\"xml\"><arguments><string>" + arg + "</string></arguments></invoke>");
    }

    //登录验证
    public void userValidate(string[] arr_data, string functionName)
    {
        
    string password = arr_data[1];
        password 
    = OperClass.Encrypt(password, 1);
        
    string sql = "select id,username from users where state='0' and userid=" + OperClass.str(arr_data[0]) + " and password=" + OperClass.str(password);
        DataSet ds 
    = dbc.ExecuteSqlDsForAccess(sql, "info");

        
    string result = "";
        
    if (ds != null && ds.Tables["info"].Rows.Count > 0)
        {
            result 
    = ds.Tables["info"].Rows[0]["id"].ToString() + "" + ds.Tables["info"].Rows[0]["username"].ToString();
        }
        
    else
        {
            result 
    = "-1";
        }
        callFunction(functionName, result);
    }
  • 相关阅读:
    编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
    Java基础——数据类型之间的转换
    Spring 事物机制总结
    Spring 3.0 注解注入详解
    Spring 注解 @Resource和@Autowired
    从jsp向servlet传送数据的两种方式
    文本输入框,只能显示内容而不能修改
    myeclipse 中项目名出现红色感叹号解决方法
    在servlet中使用split()截取以反斜杠‘’分割的字符串
    jsp页面跳转方式
  • 原文地址:https://www.cnblogs.com/flycantus/p/2151825.html
Copyright © 2011-2022 走看看