微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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知识点。到此大家是否已经对本文开头的问题不再疑惑了?

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

 

作者:深蓝色右手

出处:http://alamiye010.cnblogs.com

Tag标签: WPF/Silverlight深度解决方案

 

 A*寻路初探 http://data.gameres.com/message.asp?TopicID=25439

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐