SmartInvoke——让C#与flex轻松实现互调(sliverlight以外的另一选择)

xiaoxiao130130 发布于 2009/12/30 14:05
阅读 3K+
收藏 1

SmartInvoke是一国产开源API,实现当前所有主流平台之间方便的互调。

项目地址:http://smartinvoke.cn/

一C#调用flex

1:创建C#需要调用的swf

1.1:打开flexBuilder创建名称为DemoCs1的web application并导入SmartInvoke2009-12-2.0.swc库

如下图:

1.2:在DemoCs1项目中创建test.Hello类,以便C#的调用如下图:


1.3:在DemoCs1.mxml初始化smartinvoke并引用test.Hello类,如下图:


2:用C#编写winform程序调用前面生成的swf

2.1:打开vs创建名为Demo1的winform程序,然后引用进cn.smartinvoke2009-12-1.0.dll库,如下图:


2.2:从工具箱中将flash active拖到form1中,如下图:


2.3:在Form的load事件中创建flash active接口的包装类FlashContainer的对象如下图:


2.4:获得刚才生成的swf的绝对路径,在C#加载此swf到axShockwaveFlash,如下图:

a:
b:

2.5:创建与flex中test.Hello服务类对应的代理类test.Hello


2.6:调用FlashContainer LoadComplete代理,当flash加载完毕后调用loadComplete方法,实现对flex的 test.Hello类的调用


2.7:运行效果如下:


二:flex调用C#

1:创建C#的test.CsServer服务类,提供hello服务方法,代码如下:

  1.    
  2. using System;  
  3. using System.Collections.Generic;  
  4. using System.Text;  
  5. using cn.smartinvoke.csflex;  
  6. using System.Windows.Forms;  
  7.   
  8.        namespace test  
  9. {  
  10.     /// <summary>  
  11.     /// 实现IServerObject接口的C#的服务类,专门接受flex的调用  
  12.     /// </summary>  
  13.     public class CsServer : IServerObject  
  14.     {  
  15.         public String hello(string str)  
  16.         {  
  17.             MessageBox.Show(str);  
  18.             return "你好flex,我是C#服务";  
  19.         }  
  20.     }  
  21. }  

2:在flex中创建C#中test.CsServer服务类的代理类:test.CsServer,具体代码如下:

  1.     
  2.           package test  
  3. {  
  4.     import cn.smartinvoke.RemoteObject;  
  5.     /** 
  6.     *C# test.CsServer对应的服务类,负责对该服务类调用的封装。 
  7.     */  
  8.     public class CsServer extends RemoteObject  
  9.     {  
  10.         public function CsServer()  
  11.         {  
  12.             this.createRemoteObject();  
  13.         }  
  14.         /** 
  15.          *hello方法的代理方法 
  16.          */  
  17.         public function hello(str:String):String{  
  18.             var retObj:Object=this.call("hello",arguments);  
  19.             return retObj as String;  
  20.         }  
  21.     }  
  22. }  

3:在DemoCs1.mxml中调用test.CsServer代理类,以实现对C#服务类的调用,具体代码如下:

  1.        <?xml version="1.0" encoding="utf-8"?>  
  2. lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  
  3.  creationComplete="init()"  
  4.  layout="vertical">  
  5. <mx:Script>  
  6.     <![CDATA[ 
  7.         import mx.controls.Alert; 
  8.         import test.CsServer; 
  9.         import test.Hello; 
  10.         import cn.smartinvoke.executor.Executor; 
  11.         //在当前application 引用进test.Hello类 
  12.         var hello:Hello; 
  13.         //------------------------- 
  14.         function init():void{ 
  15.             //初始化smartinvoke 
  16.             Executor.init(); 
  17.             //在smartinvoke初始化完毕后重建代理类 
  18.             var csServer:CsServer=new CsServer(); 
  19.             var csRet:String=csServer.hello("你好C#,你运行好快"); 
  20.             Alert.show(csRet); 
  21.             //使用完毕后,销毁此对象,释放对应内存 
  22.             csServer.dispose(); 
  23.         } 
  24.     ]]>  
  25. </mx:Script>  
  26. lt;/mx:Application>  

4:运行效果如下:



是不是很简单啦!

加载中
0
w
weekend

请问能用SmartInvoke构建b/s程序吗

0
x
xiaoxiao130130

不行,这个只适用于C/S程序,提供同步访问。

如果是B/S程序,介意你使用FluorineFx

0
y
yuyifeifei

cn.smartinvoke2009-12-1.0.dll这个dll是哪里下载的  我怎么死也找不到啊    我不会flex

返回顶部
顶部