搜索
aardio官方社区 门户 查看主题

如何在c#源码中运行aardio?

发布者: bdpingguo | 发布时间: 2013-2-2 09:05| 查看数: 5142| 评论数: 2|帖子模式

本帖最后由 bdpingguo 于 2013-2-2 09:06 编辑

为什么56行,我将范例文件的改成了设置文本框的值,就报错呢。搞不懂,只能不耻下问了。另外,我想在c#源码中的一个类的方法中调用aardio,然后在这个类的另一个方法中调用这个方法。能否简单提示一下,研究了这个范例文件,感觉不知道怎么实现,感谢百忙中给予解答。
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = ..win.form( bottom=399;parent=...;text="aardio Form";right=599 )
  4. winform.add(
  5. edit={ right=389;bottom=200;text="edit";left=114;multiline=1;top=87;z=1;edge=1;cls="edit" }
  6. )
  7. /*}}*/
  8. import console;
  9. console.open()

  10. import dotNet;
  11. var clr,err = dotNet.clr( "v2.0" );
  12. if( !clr ){
  13.     console.log("当前系统未安装.Net Framework 2.0", err )
  14.     return;
  15. }

  16. //创建应用程序域
  17. var appDomain = clr.createAppDomain();

  18. //创建C#语言编译器
  19. var compile = appDomain.createCompiler("C#");
  20. compile.Reference("System.dll")

  21. //设置待编译C#源码
  22. compile.Source = /******
  23.     using System.Reflection;
  24.    
  25.     namespace CSharpLibrary  
  26.     {
  27.        public class aardioTable  
  28.     {
  29.             private object tObject;
  30.             public aardioTable(object obj){
  31.                     tObject = obj;
  32.             }
  33.             public object GetProperty(string k){
  34.                     return  tObject.GetType().InvokeMember("属性名", BindingFlags.GetProperty, null, tObject, null);
  35.             }
  36.             public void SetProperty(string k,object v){
  37.                     tObject.GetType().InvokeMember(k, BindingFlags.SetProperty, null, tObject, new object[] { v });
  38.             }
  39.             public object InvokeMember(string k,params/*不定个数参数*/ object[] arg ){
  40.                     return  tObject.GetType().InvokeMember(k, BindingFlags.InvokeMethod, null, tObject, arg );
  41.             }
  42.     }
  43.         
  44.        public class CSharpObject  
  45.     {
  46.         public object Hello( object comObject ){   
  47.         
  48.             aardioTable tab = new aardioTable( comObject );
  49.          
  50.                 tab.SetProperty( "属性名",456 ) ;
  51.               
  52.             tab.InvokeMember( "执行aardio","winform.edit.text = 'aaa';"   );
  53.             
  54.             return tab.GetProperty("属性名");
  55.         }
  56.     }   
  57.     }
  58. ******/

  59. //编译并返回程序集  
  60. var assembly = compile.Compile()  
  61. if(!assembly){
  62.         ..io.print(compile.getLastError());
  63.         appDomain.unload();
  64.         return ;
  65. }

  66. //调用程序集创建类对象
  67. var cSharpObject = assembly.CreateInstance("CSharpLibrary.CSharpObject")  

  68. //调用实时编译的C#函数
  69. var ret = cSharpObject.Hello( {
  70.     属性名 = 123;
  71.     执行aardio = function( code ){
  72.         loadcode(code)();
  73.     }
  74. } );

  75. winform.show()
  76. win.loopMessage();
复制代码

最新评论

不争 发表于 2013-2-2 11:00:49

错误信息已经可以分析出 cSharpObject.Hello 报错。 注释掉 loadcode(code)(); 不再报错,由此可以分析出 tab.I

错误信息已经可以分析出 cSharpObject.Hello 报错。
注释掉    loadcode(code)();  不再报错,由此可以分析出 tab.InvokeMember( "执行aardio","winform.edit.text = 'aaa';"   ); 这句代码出错了。

你的winform是一个局部变量,而loadcode()里访问的是全局变量。
所以把 var winform 前面的var去掉就可以了。
bdpingguo 发表于 2013-2-2 14:02:29

[quote][size=2][color=#999999]不争 发表于 2013-2-2 11:00[/color] [url=forum.php?mod=r

不争 发表于 2013-2-2 11:00
错误信息已经可以分析出 cSharpObject.Hello 报错。
注释掉    loadcode(code)();  不再报错,由此可以分析 ...

真心佩服您,昨天晚上搞到1点都没搞出来,睡觉都想是怎么回事呢。真服了,谢谢!!!

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2017-9-22 07:10 , Processed in 0.046875 second(s), 21 queries , Wincache On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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