搜索
查看: 3990|回复: 8

请教,帮忙看看那里不对?

  [复制链接]

29

主题

84

帖子

538

积分

三级会员

Rank: 4

积分
538
发表于 2013-1-31 16:41:49 | 显示全部楼层 |阅读模式
想用aardio运行C#源码,一直出错!提示错误见截图,不注释24行,可以得到24行的结果,但是下面的代码就不运行了。另附上
aaa.dll 文件,及aaa的C#类源码。请教了,实在是找不到原因,试了很多方法。
111.JPG
  1. import win.ui;
  2. import dotNet;
  3. import console;
  4. /*DSG{{*/
  5. mainForm = ..win.form( bottom=400;parent=...;text="aardio Form";right=600 )
  6. mainForm.add(  )
  7. /*}}*/

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

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

  16. //创建C#语言编译器
  17. var compile = appDomain.createCompiler("C#");
  18. compile.Reference("System.dll");
  19. var aa = appDomain.load("aaa");
  20. var bb = aa.CreateInstance("aaa.Class1");
  21. //console.log(bb.zzp());

  22. //设置待编译C#源码
  23. compile.Source = /******
  24.         using System;
  25.         using System.Collections.Generic;
  26.         using System.Text;
  27.         using aaa;
  28.        
  29.         namespace czt
  30.         {
  31.             class Program
  32.             {
  33.                 static void Main(string[] args)
  34.                 {
  35.                     Program a1 = new Program();
  36.                     a1.txt();
  37.                      
  38.                 }
  39.                 public void txt()
  40.                 {
  41.                     Class1 tt = new Class1();
  42.                     tt.zzp();
  43.                 }
  44.             }
  45.         }
  46. ******/

  47. //编译并返回程序集  
  48. var assembly = compile.Compile()  
  49. if(!assembly){
  50.         ..io.print(compile.getLastError());
  51.         appDomain.unload()  
  52.         return;  

  53. }
  54. //调用程序集创建类对象
  55. var cSharpObject = assembly.CreateInstance("czt.Program")  

  56. mainForm.show()
  57. win.loopMessage();
复制代码
附件.rar (1.78 KB, 下载次数: 67)
回复

使用道具 举报

4

主题

880

帖子

4929

积分

荣誉会员

Rank: 8Rank: 8

积分
4929
发表于 2013-1-31 17:27:12 | 显示全部楼层

[i=s] 本帖最后由 不争 于 2013-1-31 20:18 编辑 [/i] 如果是放在工程目录下,要这样写 appDomain.loadFile(

本帖最后由 不争 于 2013-1-31 20:18 编辑


如果是放在工程目录下,要这样写 appDomain.loadFile("\aaa.dll")
aardio支持内存加载的,指定路径就可以,

appDomain.load()
在EXE所在目录(或bin子目录)下查找DLL,开发时就是aardio根目录

注意看IDE的函数提示
回复

使用道具 举报

29

主题

84

帖子

538

积分

三级会员

Rank: 4

积分
538
 楼主| 发表于 2013-1-31 18:50:07 | 显示全部楼层

是放在工程目录下,这样写,还是那种提示错误

是放在工程目录下,这样写,还是那种提示错误
回复

使用道具 举报

4

主题

880

帖子

4929

积分

荣誉会员

Rank: 8Rank: 8

积分
4929
发表于 2013-1-31 20:15:47 | 显示全部楼层

appDomain.loadFile("/aaa.dll") 这样写

appDomain.loadFile("/aaa.dll") 这样写
回复

使用道具 举报

29

主题

84

帖子

538

积分

三级会员

Rank: 4

积分
538
 楼主| 发表于 2013-2-1 00:43:52 | 显示全部楼层

和这个没有关系,还是出错

和这个没有关系,还是出错
回复

使用道具 举报

4

主题

880

帖子

4929

积分

荣誉会员

Rank: 8Rank: 8

积分
4929
发表于 2013-2-1 09:26:15 | 显示全部楼层

昨天没看仔细, 实际上你的代码中已经有答案了。 编译需要用 compile.Reference() 引用DLL, 你已经写了 compile.Refe

昨天没看仔细,
实际上你的代码中已经有答案了。

编译需要用 compile.Reference() 引用DLL,
你已经写了 compile.Reference("System.dll");

那么你在C#源码中要使用aaa.dll,首先要添加引用,如下
  1. var compile = appDomain.createCompiler("C#");
  2. compile.Reference( io.fullpath("/aaa.dll") )
复制代码
回复

使用道具 举报

29

主题

84

帖子

538

积分

三级会员

Rank: 4

积分
538
 楼主| 发表于 2013-2-1 18:52:43 | 显示全部楼层

太感谢了,衷心谢谢您!{:hug:} appDomain.loadFile();和compile.Reference()区别是什么啊

太感谢了,衷心谢谢您!
appDomain.loadFile();和compile.Reference()区别是什么啊
回复

使用道具 举报

4

主题

880

帖子

4929

积分

荣誉会员

Rank: 8Rank: 8

积分
4929
发表于 2013-2-1 19:20:08 | 显示全部楼层

compile.Reference("System.dll"); 是为C#代码编译器添加引用。 就好象你在VS里为C#工程添加引用的操作类似。 appD

compile.Reference("System.dll"); 是为C#代码编译器添加引用。
就好象你在VS里为C#工程添加引用的操作类似。

appDomain.loadFile("/aaa.dll") 只是加载DLL到应用程序域中,供运行时使用。

一个是用来编译源码,一个是用来运行,这两个本就是风马牛不相及。
回复

使用道具 举报

29

主题

84

帖子

538

积分

三级会员

Rank: 4

积分
538
 楼主| 发表于 2013-2-1 20:53:50 | 显示全部楼层

[i=s] 本帖最后由 bdpingguo 于 2013-2-1 20:59 编辑 [/i] 谢谢您的解释,不知怎么感谢您,等我学的好了,也要向你学习,帮助更

本帖最后由 bdpingguo 于 2013-2-1 20:59 编辑

谢谢您的解释,不知怎么感谢您,等我学的好了,也要向你学习,帮助更多需要帮助的人。其实我在测试中按照范例也试了compile.Reference("aaa.dll");结果也报错,所以怎么也找不到答案。看了你的答案,知道这次又栽在绝对路径、相对路径上了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2017-9-25 19:25 , Processed in 0.062500 second(s), 21 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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