首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > Mono 跨平台编程应该注意的事项
【标  题】:Mono 跨平台编程应该注意的事项
【关键字】:Mono
【来  源】:http://blog.csdn.net/zhangjianying/archive/2006/09/28/1302064.aspx

Mono 跨平台编程应该注意的事项

1)文件系统
   在不同的平台上文件系统是不同的。包括性能等等,最简单的例子就是 Java 除开 IO 包之外还添加 NIO 包。因为在 Unix
   系统上使用 块方式(NIO) 读写比 用流(IO)的方式性能要好的多. 当然 Mono 也考虑到这个问题所以才会有 Mono.Unix 名称空间的
   存在.当然最显而易见的是在不同的平台上文件分割符的不同. Windows 上使用 "\",Linux/Unix 上使用 "/". 为了使程序能适应
   不同的文件系统,可以使用 System.IO.Path.DirectorySeparatorChar 来获取当前系统的文件分割符.但是更好的办法是用
   System.IO.Path.Combine 方法来完成:
  
   string directory = "tmp";
   string filename = "myfile";
   // WRONG
   string wrongpath = directory + "/" + filename;
   // RIGHT!
   string rightpath = System.IO.Path.Combine (directory, filename);
  
   获得系统临时目录,Windows 下在 %WindowsPath%\temp ; Linux/Unix 在 /tmp 下。所以可以使用 GetTempFileName() 来获取
   系统的临时目录,方便我们的程序存贮临时数据。Mono小组已经将该方法为适应多平台而重写。重写的方法还有很多比如:  
   GetPathRoot()、GetFileName() .......
  
   Linux/Unix 在文件系统布局上也有特别之处,它们只有一个逻辑分区那就是 root 根目录 (即 "/").而Windows 通常包含不只一个
   逻辑分区( D:\、E:\、F:\ ).当需要用户要针对逻辑分区操作的使用可以使用 System.IO.Directory.GetLogicalDrives() 来获取
   当前系统所有的逻辑分区.
  
   using System;
   using System.IO;
   public class Demo {
    public static void Main (string [  ] args)
   {
      foreach (string dir in Directory.GetLogicalDrives ( )){
        Console.WriteLine ("{0}", dir);
      }
 }
   }

   最后提醒在 Linux/Unix 平台上是区别字符大小写的,而 Windows 则不区别。所以 README 与 ReadMe 在 Linux/Unix上是被认为
   2个不同的文件, Windows 则认为是同一个文件。
  
  
2) Graphical user interfaces (用户图形接口)
   Mono提供 System.Windows.Forms 类似 Windows 的用户图形接口,也提供了 Gtk# 类似 Linux or Solaris 的图形接口
   。它们都包含了 menu titles, dialog button order, drag and drop 等等。
  
   当你在开发跨平台应用程序的时候,将会在 System.Windows.Forms (SWF) 与 Gtk# 之间做出选择。 Mono SWF 是对 Microsoft's
   .NET framework 中的 SWF 的移植,事实上它并不等同与 MS SWF ,因为MS SWF 有太多的代码是依赖原 COM 接口。MONO
   小组已经将 Mono SWF 重新实现其原理和 Java 的 Swt 组件基本类似.而且 Mono SWF 并不是完整的跨平台,它只能够移植基于 X86
   的Linux 平台 (只有 Linux).真正完整实现跨平台的只有 Gtk#. 所以 Mono小组 推荐开发者使用 Gtk# 作为应用程序的首选图形接口。
  
3) Configuration (配置)
   相当一部分 Windows .Net Application 会使用注册表来存贮它们的配置信息。而一部分 Linux/Unix Mono Application 会使用
   GConf 来存贮它们的配置信息。这样做都将不利于程序的跨平台。最好的办法是使用 XML 结构的文件来保存配置信息。
  
4)P/Invoke
   针对 Net assembly 来说只要将其加载至 GAC 里面。Mono/MS .Net 都将可以成功使用.
   针对不同系统不同语言的库文件来讲,应该知道同一个文件在不同系统的名称。然后为自己的应用程序配置一份 .Config文件
   在文件中配置:
  
   <configuration>
   <dllmap dll="libglib-2.0-0.dll" target="libglib-2.0.so.0"/>
   <dllmap dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0"/>
   <dllmap dll="libatk-1.0-0.dll" target="libatk-1.0.so.0"/>
   <dllmap dll="libgtk-win32-2.0-0.dll" target="libgtk-x11-2.0.so.0"/>
   </configuration>
  
   只有这样 DllImport function 才会正确的在 target 目标平台上加载对应的库文件。 

行政区划程序的设计(七):【上一篇】
随机显示数据库记录:【下一篇】
【相关文章】
  • Mono in Ubuntu
  • VMware Player测试Mono应用
  • Installation Tips: Mono 1.1.15 on Ubuntu
  • MS PetShop3 -> MonoRail PetShop 完成移植
  • 移植MSPetShop3到Castle MonoRail -Model与DAL层的移植(AR)
  • Running .Net applications on Linux with Mono
  • MonoRail学习-介绍篇
  • MonoRail学习-入门实例篇
  • MonoRails学习- Layouts
  • MonoRail学习-Component
  • 【随机文章】
  • 好的站点
  • snmp 协议
  • PBr连接Sybase-SQLServer的注意事项
  • 如何用Shell实现程序组快捷方式的添加
  • 终于有一点进步了
  • 3DS Max 7.0 PF Source粒子全攻略(19)
  • Windows 2000磁盘文件的备份与还原
  • MySQL 性能优化
  • 【分享】12月12日 精品软件下载
  • 线程池的介绍及简单实现
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.