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

WPFSilverlight深度解决方案: 制作Silverlight专属的动态链接库(DLL),第1张

概述  在我的教程里一直未公开的QX.dll以及QXGameEngine开源后,大家讨论得比较多的QXGame_Silverlight3.dll。它俩到底是何方神圣,在引擎中起着何种作用;为什么就它俩不开源,莫非核心代码都在里面?本节我将就如上问题给予大家一个答案,揭开长久以来被尘封的种种谜团。     事情的起因缘于教程第七节中那对牛人老外用C#写的A*算法,一句话:相当的牛。于是乎我忍不住了,这么

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

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

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

@H_404_10@

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

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

@H_404_10@

里面默认带了一个@[email protected],没用,干掉它。嘿嘿

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

@H_404_10@

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

@H_404_10@

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

@H_404_10@

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

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

@H_404_10@2@H_404_10@Silverlight中更没有System.windows.Forms这个东西

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

@H_404_10@4@H_404_10@Silverlight中不允许使用@H_404_10@unsafe代码

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

@H_404_10@

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

@H_404_10@

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

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

@H_404_10@

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

@H_404_10@

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

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

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

@H_404_10@

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

@H_404_10@

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

@H_404_10@

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

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

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

 

作者:深蓝色右手

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

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

 

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

总结

以上是内存溢出为你收集整理的WPF/Silverlight深度解决方案: 制作Silverlight专属的动态链接库(DLL)全部内容,希望文章能够帮你解决WPF/Silverlight深度解决方案: 制作Silverlight专属的动态链接库(DLL)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1029012.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存