Multigen Vega 3.7向 .Net Framework 取得重大进步

         在上一次"Vega 向.NET 移植的第一次尝试" 文章写出后,到今天已快一个月了.上次我只写了几个简单的类.做一次非常简单的封装.今天我要发布的是一个Vega向.Net Framewrok 的第一个版本. NVega.Framework 1.0.0.

        废话少说,看来看几张Demo程序的截图: Demo 程序下载 (已包含NVega.Framework 类库)

上次说到,Vega是类型没办法封装到.NET,除非用C++.NET 或用COM.但天无绝人之路,Vega的类库里,基本都是用指针.这个指针帮了大忙,C#里涩及到非托管指针时,清一色都是IntPtr,当然还有一个不常用的就不提它了.数据结构,也可以用Marshal做很好的定义.所以不用COM,也不用C++.NET,而使用C#就可以了.一个字:爽!

 基本思路大至如下.

第一步:当然首先是要把本地代码封装进去,NativeMethod包含对每Vega数据类型操作的本地代码.最原始的直接对应底层操作.它们的可见性全部是internal的,我们不希望类库的用户使用它.因为我们的一个很重要的目的就是要用户转向面向对象的编程,结束结构化的Vega程序设计.并且这样做可以防止非法的一些操作.

由于这些方法是很原始的,如删除VgPlayer中VgObject的函数.

        [DllImport( " psvgd.dll " )]
        
public   static   extern   void  vgRemPlyrObj(IntPtr plyr, IntPtr obj);

对上层的类库使用者来说,它提供的信息太少.很可能传递的两个参数都是指向VgPosition的指针,这当然是的严重的非法滥用.但进行类型封装了以后,就具备了.NET的类型安全特性.这样你还会错吗?有点难.如下:

第二步:类型封装.这步要做的是建立起.NET 中的类关系网.要对Vega中的类型封装,首先的一步就是要保存Vega类型(非托管类型)实例的引用.也就是说封装后的类型是依赖于非托管类型的(指的是Multigen Vega中的核心类型:如vgWindow, vgChannel, vgPlayer,等等),为了保持与原Vega知识结构的相通性.变动不能太大.所以封装后核心类的层次结构不变.并且所有原方法变为托管方法后,方法名全去掉"vg".在有冲突或有不得已的情况才改用其它方法名.

第三步:数据类型处理.Vega中的非常多的数据结构.很多用#define定义的数据宏,可以用.NET 中枚举类型.它可以和整类之间进行很好的转换.

第四步:这步差不多是话了.当然就是用了.但为了使用方便,封装了一个线程类.抽象类AbstractVgThread和一个默认实现.如果你觉得不爽可以继承AbstractVgThread类重载RunVegaApp()方法就可以了.

说了这么多也许你已心动了.那就下载下去试试吧.

有几点说明:这次时间太紧,就搞了两三天而已.很多方法都没测试,所以质量没有保证.并且很多东西都没封装.如VgChannel类只有个几方法而且,什么也做不了.

我决定考研.这年头本科没法混啊!这不,这个周都没有上自习了.所以不能再这样下去.我决定暂停完善和升级.下次再有时间,我也不知道是何月了.但至少是15个月以后(09年研究生考试后).

我做Vega向.Net 的移植,主要是兴趣,一方面是降低学习Multigen Vega的门槛.如果你也有兴趣,你可以发邮件给我,我可以给你源代码.如果你觉得反编译后代码的可读性很好,那另当别论.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值