WPF/Silverlight深度解决方案:(十二)制作Silverlight专属的动态链接库(DLL)

 在我的教程里一直未公开的QX.dll以及QXGameEngine开源后,大家讨论得比较多的QXGame_Silverlight3.dll。它俩到底是何方神圣,在引擎中起着何种作用;为什么就它俩不开源,莫非核心代码都在里面?本节我将就如上问题给予大家一个答案,揭开长久以来被尘封的种种谜团。

    事情的起因缘于教程第七节中那对牛人老外用C#写的A*算法,一句话:相当的牛。于是乎我忍不住了,这么好的源码不拿来用太亏本了。但是,该源码却是在Winform环境下编写的,如何将之运用到WPF或是Silverlight平台上呢?

我们首先用VS打开源代码,整个结构如下:

一眼看过去就知道精华在哪了,Algorithms文件夹下的6cs类即是寻路用的所有逻辑,并且全部属于namespace Algorithms命名空间下。发现金矿了,特别的心动,急了,杂办?当然是挖出来咯。

接下来关闭此解决方案,并另外新建一个Silverlight类库(如果是WPF平台,就建立WPF类库,道理是一样的),取名为QXGame_Silverlight3

里面默认带了一个Class1.cs,没用,干掉它。嘿嘿

邪恶的事情即将发生。在项目上点击鼠标右键->添加->现有项,

然后找到本文开头的那6cs文件加入到此项目中:

我靠。。。难道是传说中的移花接木???看到希望了,赶紧按Ctrl+Shift+B编译一下,伤心哪,一堆错误:

没折了吗?仔细分析一下,其实也不过4处而已:

1Silverlight中没有System.Drawing这个东西

2Silverlight中更没有System.Windows.Forms这个东西

3)无法识别Point这个结构类型,需要添加一个包含有该Point定义的命名空间引用

4Silverlight中不允许使用unsafe代码

首先我们看第4点,在Winform/WPF中可以使用不安全代码;而在Silverlight项目中是不允许使用不安全代码的:

接下来我们找到源码中有出现unsafe代码的地方,发现其实它们的调用已经被注释掉了,注释上有提到使用unsafe会快那么一点点,但是不多。既然不用它能实现相当功能,且又可以被Silverlight所支持,不如干脆点,直接干掉它们好了:

OK,问题4成功解决;再下来我们同样可以很轻松的解决掉问题12,只需删除这6cs文件中的所有using System.Drawingusing System.Drawing.Drawing2Dusing System.Windows.Forms引用即可。

剩下来的仿佛只有问题3了,这个就更简单了,直接根据提示添加指定的命名空间引用即可:

到此是否大功告成了?不妨再次编译一下,结果又是一身冷汗:

又增加了45个错误。偶的神。。。

冷静的回想一下,不过是修改了错误3,加入了对Point的识别才造成出现这些错误,莫非与之有关?

再逐条分析,嘿嘿,眉目出来了,原来原代码的PointSystem.Drawing中的Point,其中的Point.XPoint.Y均为int类型;而SilverlightSystem.Windows中的Point.XPoint.Y则是double类型。找到了问题所在,解决也就不难了。大家想到的最直接且快速的方案即是转换,我们逐个找出提示出错的地方,然后将它们进行int类型转换,例如下面这样:

当然,这样做有损性能,如果您不嫌麻烦,可以用两个int来代替Point,或自己写个struct,处理方式太多了。至于本节示例嘛,作者比较懒,暂时按上面的方法对所有的错误进行类似处理了。仅仅需要不到两分钟的时间,即可干掉这45个错误,最后再次按下Ctrl+Shift+F5,嘿,生成成功啦!激动啊那个激动,用千辛万苦来形容毫不为过。金矿终于被挖出来,但它被存放到了哪儿?我们此时再次打开项目属性,点击输出目录的浏览按钮,然后在该输出文件夹上点右键->打开:

其中QXGame_Silverlight3.dll即是我们梦寐以求的金矿,一定要好好珍惜哦:

如果还有人要提问:该如何使用它?我只能和他说:一个.NET开发者不知道如何引用第三方dll,是天大的笑话哪~

结尾语:本节大家学到了什么?看似简单的问题其实蕴涵着挺多的Silverlight知识点。到此大家是否已经对本文开头的问题不再疑惑了?

最后说说个人的想法:将他人的源码经过修改后变成自己的工具是可以的,但是同时也应当建立在尊重他人劳动成果的前提下,尽量保留一些对源码来源及作者的信息描述,无论是在源码或是文章中体现,毕竟辛酸只有同道中人能感受。

作者:深蓝色右手
本系列目录及源码下载: 点击进入
本文版权归作者和CSDN共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面显著位置给出原文连接,否则保留追究法律责任的权利。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值