iTimothy

君看一叶舟,出没风波里


  • 首页

  • 分类

  • 归档

  • 项目

  • 关于

域名正式落户GoDaddy!

发表于 2009-10-19 | 分类于 站点日志 | | 阅读次数:
字数统计: 191 字 | 阅读时长 ≈ 1 分钟

终于收到了GoDaddy的确认邮件,域名转移成功了,恭喜一下自己~

domain

早就有了转移域名的想法,在同事的推荐下,选择了把域名转到GoDaddy去,这样域名解析速度非常快,几乎是实时的,而且域名解析不受任何限制,价格换算成RMB,比国内还便宜,更重要的是,老外会把域名当成是你的虚拟财产,而国内则不然……整个转移的过程几经周折,不过最后算是有了个圆满的结果……推荐下xjb同学的一篇文章《如何转移域名到GoDaddy.com》,非常有指导价值。下一步的打算是把网站空间也搬到国外去,嘿嘿!

Win7 XP Mode RTM 版本发布

发表于 2009-10-09 | 分类于 技术控 | | 阅读次数:
字数统计: 284 字 | 阅读时长 ≈ 1 分钟

Win7的XP模式一直是Beta版,没想到过了国庆,发布了RTM版本,MSDN订阅上已经可以下载到了。于是迫不及待的从MSDN上拖了一个下来,Win7的XP Mode里面自带一个Professional的正版XP,安装需要给Win7打上一个系统更新的补丁,再一个就是XP的虚拟磁盘文件。两样都安装好过后,还要确认你的CPU是否支持虚拟化技术,并且默认的BIOS里面,CPU的虚拟化设置为Disabled,需要设为Enabled才可以。一切准备就绪,就可以开始运行XP Mode了。

第一次运行XP Mode,系统会为你进行初始化设置:

xpmode1

和其他的虚拟机软件一样,你可以为其指定分配内存大小,虚拟机启动后,界面和其他虚拟机界面相似:

xpmode2

比较方便的是,可以在Win7中运行安装在XP Mode中的软件,并且窗口是直接展现在Win7当中的,这种方式为软件的兼容性提供了更好的平台

xpmode3IE6与IE8共存在Win7桌面,一片和谐的景象~~

xpmode4

Microsoft MyPhone更新了

发表于 2009-10-07 | 分类于 技术控 | | 阅读次数:
字数统计: 401 字 | 阅读时长 ≈ 1 分钟

微软推出的MyPhone是个非常不错的东东,自从MyPhone的beta版本以来,我都一直用它来向网络同步和备份我的手机联系人信息。如今微软推出了新版本的客户端,版本升级至01.05.2128.0401.其中添加了一些新的特性:

查找丢失的手机
“我的手机空间”服务可以在地图上显示上次所知的手机位置(基于上次使用“我的手机空间”同步或共享照片的位置)。此服务需由用户激活。

锁定丢失的手机
如果手机丢失或被盗,“我的手机空间”可以通过远程锁定您的手机或清除其内容,帮助保护您的信息。此功能仅面向部分市场提供,并可能产生一定的费用。

在主流社交网站上共享照片 现在您可以通过“我的手机空间”Web 帐户或手机轻松便捷地将照片发布到 Facebook、Flickr、MySpace 和 Windows Live。

节省手机空间
当您从手机中删除内容后,仍然可以通过您的 Web 帐户访问这些内容(直到从存档文件夹中删除)。

得知此版本的更新,我也迫不及待的把我手机上的版本进行了升级,总的说来,比先前的版本更好用了,其实我用得最多的,还是同步联系人信息的功能。推荐有Windows Mobile手机的同学都来体验一下,手机下载地址:[http://myphone.microsoft.com/install**](http://myphone.microsoft.com/install)**

扩展方法使用小结

发表于 2009-09-28 | 分类于 技术控 | | 阅读次数:
字数统计: 1.5k 字 | 阅读时长 ≈ 7 分钟

随着.Net Framework一路走来,已经让广大开发人员体验到快速开发的甜头,这得益于.Net Framework为我们提供了更高层次的封装,开发人员不必关心底层的Win32 API及其繁琐的调用参数,而可以把大部分的经历放在对业务的分析和实现。随着.Net的不断革新,也引入了更多的特性,例如C# 2.0,就增加了匿名方法和迭代器,这些特性让我们的编码效率更高。随着C# 3.0的推出,引入了更多的新特性,包括:隐式类型局部变量、对象初始化器、Lambda表达式、扩展方法、匿名类型。

而这些特性,都为LINQ的推出,构建好了基础。其中一个比较不错的特性,就是扩展方法。扩展方法,顾名思义,就是在类型定义完成之后,再继续为其添加新的方法。这是相当方便的,比如对于一个已经封装好的Assembly来说,我们不用改动Assembly的代码,而通过扩展方法就能实现对其功能的扩展,而且在调用的时候,仅仅通过代码,你几乎判断不出这是扩展方法,还是Assembly本身的方法。

扩展方法在.Net 3.5中的应用也是非常普遍的,如果你仔细观察,就会发现我们常用的Linq to Object中的Where,Select,Average,Sum等方法,以及Linq to SQL中的Where,Select,Average,Sum等方法,其实都是扩展方法,他们分别定义于System.Linq.Enumerable类和System.Linq.Queryable类之中。

就扩展方法本身而言,也存在一些限制之处。对于编译器来说,如果扩展方法和被扩展类型的方法发生冲突的时候,在调用此方法的时候,究竟是调用被扩展类型的方法,还是扩展方法呢?通过一个例子,我们就能发现其中的区别。

<span class="lnum">   1:  </span>  <span class="kwrd">class</span> Program




<span class="lnum">   2:  </span>    {




<span class="lnum">   3:  </span>        <span class="kwrd">static</span> <span class="kwrd">void</span> Main(<span class="kwrd">string</span>[] args)




<span class="lnum">   4:  </span>        {




<span class="lnum">   5:  </span>            <span class="kwrd">new</span> TestClassA().Display(<span class="str">"Test"</span>);




<span class="lnum">   6:  </span>            <span class="kwrd">new</span> TestClassB().Display(<span class="str">"Test"</span>);




<span class="lnum">   7:  </span>            Console.ReadLine();




<span class="lnum">   8:  </span>        }




<span class="lnum">   9:  </span>    }




<span class="lnum">  10:  </span>




<span class="lnum">  11:  </span>    <span class="kwrd">class</span> TestClassA




<span class="lnum">  12:  </span>    {




<span class="lnum">  13:  </span>        <span class="kwrd">public</span> <span class="kwrd">void</span> Display(<span class="kwrd">int</span> b)




<span class="lnum">  14:  </span>        {




<span class="lnum">  15:  </span>            Console.WriteLine(<span class="str">"This is TestClassA.Display() ..."</span>);




<span class="lnum">  16:  </span>        }




<span class="lnum">  17:  </span>    }




<span class="lnum">  18:  </span>




<span class="lnum">  19:  </span>    <span class="kwrd">class</span> TestClassB




<span class="lnum">  20:  </span>    {




<span class="lnum">  21:  </span>        <span class="kwrd">public</span> <span class="kwrd">void</span> Display(<span class="kwrd">string</span> s)




<span class="lnum">  22:  </span>        {




<span class="lnum">  23:  </span>            Console.WriteLine(<span class="str">"This is TestClassB.Display() ..."</span>);




<span class="lnum">  24:  </span>        }




<span class="lnum">  25:  </span>    }




<span class="lnum">  26:  </span>




<span class="lnum">  27:  </span>    <span class="kwrd">static</span> <span class="kwrd">class</span> TestClassExtention




<span class="lnum">  28:  </span>    {




<span class="lnum">  29:  </span>        <span class="kwrd">static</span> <span class="kwrd">public</span> <span class="kwrd">void</span> Display(<span class="kwrd">this</span> <span class="kwrd">object</span> o, <span class="kwrd">string</span> s)




<span class="lnum">  30:  </span>        {




<span class="lnum">  31:  </span>            Console.WriteLine(<span class="str">"This is TestClassExtention.Display() ..."</span>);




<span class="lnum">  32:  </span>        }




<span class="lnum">  33:  </span>    }

程序输出:

ExtentionMethod

可以看出,TestClassA的方法和扩展方法并没有冲突,因为他们的方法签名是不一样的,而TestClassB的方法和扩展方法有冲突,因为他们的都是接受一个string类型的输入参数。从结果可以看到,程序对Display的方法调用,TestClassB本身的Display方法,要“优先”于扩展方法Display被调用。因此,类本身的方法如果满足调用条件,那么这个方法会被优先执行,只有在类当中无法找到同样参数的方法时,扩展方法才有机会被执行。所以,我们可以得出这样的结论:扩展方法的优先级较低,也即扩展方法不会覆盖同名的类本身的方法。

另外,还有一个比较明显的区别,就是扩展方法要远远弱于类本身的方法,比如,在一个类中,类的方法可以访问自己的非公有成员,而扩展方法做不到这一点。

BLOG界面调整

发表于 2009-09-26 | 分类于 站点日志 | | 阅读次数:
字数统计: 92 字 | 阅读时长 ≈ 1 分钟

这两天改了一下BLOG的CSS,主要调整了一下文章的标题文字的样式和文章内容文字的大小,在此推荐浏览本BLOG的同学安装微软雅黑字体。另外,在修改数据库的时候,忘了备份,导致最近一篇文章的评论丢失,囧……下次一定吸取教训。

VC源动力站点关闭

发表于 2009-09-25 | 分类于 站点日志 | | 阅读次数:
字数统计: 276 字 | 阅读时长 ≈ 1 分钟

xiaozhou

VC源动力是一个Visual C++ 开发相关的网站,从2004年09月开始建立,站点的主要宗旨是向广大VC开发爱好者提供免费的文章、代码、交流平台,至今已经有5年的时间了。但是由于我的精力有限,站点长时间荒废没有更新,很是惭愧。再加上如今自己的工作方向不再是VC开发,而是转向.net了开发,所以我决定将VC源动力站点关闭。原来的www.xiaozhou.net由我的个人博客所代替,原有博客的地址https://xiaozhou.net/cooldog也会自动跳转到https://xiaozhou.net。

在此感谢各位网友曾经对该站的支持和帮助,如果这个站点所提供的信息曾经帮助过你解决过VC开发上所遇到的问题,又或者在开发过程中带给你灵感,那将是我的荣幸。等我有时间,我会把所有的站点资料整理成文件供网友下载。希望大家会记得这个名字:VC源动力。

My BLOG is 5 years old!

发表于 2009-09-24 | 分类于 站点日志 | | 阅读次数:
字数统计: 171 字 | 阅读时长 ≈ 1 分钟

翻了翻BLOG的第一篇日志,是2004年9月7日,记得当时还上大四,由于一时兴起,申请了域名,购买了空间,在网上安了个小家。不知不觉,5年过去了,无奈于国内空间服务商的质量,大叔我中途四处寻觅,换了N个空间服务商,BLOG也到处搬家,真所谓颠沛流离啊。最近也打算把域名迁到国外去,原因不用多说了,中途遇到的挫折更不用说了,待域名迁移成功,写个总结给有相同打算的童鞋看看。5年了,借此文章悄悄纪念下自己的blog。

IIS7中Host WCF遇到的问题

发表于 2009-09-03 | 分类于 技术控 | | 阅读次数:
字数统计: 332 字 | 阅读时长 ≈ 1 分钟

最近重装了系统,用上了Windows 7,在IIS7中Host WCF Service的时候,遇到一个比较奇怪的问题,当在站点下面添加应用,指向WCF的目录后,访问.svc文件,浏览器提示以下错误:

The page you are requesting cannot be served because of the extension configuration.
If the page is a script, add a handler. If the file should be downloaded, add a MIME map. 

这种错误应该是.svc文件没有映射到相关的handler上,因此IIS不知道怎么处理该请求。带着错误信息,在网上搜索了一把,终于找到了解决方法,看来搜索引擎很强大。

解决方法如下:

1.用管理员身份运行cmd命令行

2.切换到目录C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation

3.运行命令: servicemodelreg –i

这样,工具会自动把WCF相关的注册项安装到IIS7中,再打开浏览器访问WCF Service,一切正常。

细想了一下自己的装机过程,先装了VSTS和.net framework,后来发现IIS7没有在windows7里面默认安装,要到部署WCF的时候,才装好IIS7。这样在安装.net framework 3.0的时候,因为没有安装IIS7,所以一些注册项就没有起到作用。此方法可以将WCF的配置项重新配置到IIS7中,供同学们参考。

站点被挂马,现已恢复正常

发表于 2009-08-19 | 分类于 站点日志 | | 阅读次数:
字数统计: 198 字 | 阅读时长 ≈ 1 分钟

访问博客,发现杀毒软件弹出病毒警告,直觉告诉我,站点可能被挂马了。果不其然,FTP登录到服务器一看,很多.htm和.js文件都被改了,而且被改的文件还很多,里面都插入了指向恶意站点的链接。感觉像是用程序遍历的,包括每个子目录里面的文件都无一幸免。索性把站点搞了一次大清理,该删的文件删了,该备份的地方备份了。不排除是站点的程序有漏洞,或者是虚拟主机被感染病毒的可能。在此强烈BS一下挂马之人,我将用我余生中的小部分时间,和这种无耻的挂马行为对抗到底!

Visual Studio IDE配色方案

发表于 2009-07-13 | 分类于 技术控 | | 阅读次数:
字数统计: 391 字 | 阅读时长 ≈ 1 分钟

对于咱们代码民工来说,每天都要面对电脑,而平时眼睛盯得最多的,莫过于Visual Studio集成开发环境了。而Visual Studio的默认背景色颜色是白色的,久而久之,眼睛最容易疲劳。所以,一个好的配色方案,能减少屏幕对眼睛的刺激,也能减缓疲劳。经过长久的收集和摸索,老衲收藏了几种十分不错的配色方案,颜色都很柔和,不刺激眼睛,相当的绿色和环保。下面一一和大家分享一下:

所有的配色方案,都采用的是微软的Consolas字体,这可是微软官方推荐的编程御用字体哦~!效果怎样大家可以自己看了,反正我一直用它。

第一种配色方案(BlueTheme)浅绿色,也是老衲最喜欢的一种颜色。基本上字体颜色都没怎么变,只是改了背景色,色彩柔和。

bluetheme

第二种配色方案(YellowTheme)浅黄,也没改字体颜色,只是该了背景,浅黄,颜色不刺眼

yellowtheme

第三种配色方案(GrayTheme)浅灰色

violettheme

第四种配色方案(DarkTheme)黑色主题,这是一个国外哥们推荐的,很黑很酷

darktheme

所有的配色方案,我都打包上传了,也就是Visual Studio IDE的配置文件,通过Tools->Import and Export Settings可以方便的导入和导出配置,用以切换主题。

点击下载此文件

大家还有什么好的配色方案,欢迎分享~

HTC Touch Pro 的重力感应功能

发表于 2009-07-07 | 分类于 技术控 | | 阅读次数:
字数统计: 2.5k 字 | 阅读时长 ≈ 13 分钟

080605_htc_touch_pro_05

HTC Touch Pro带的重力感应功能很实用,不过一直在寻思能否找到重力感应器的SDK。在网上搜罗了一大圈,都没结果,看来厂商并不希望公开这样的接口。果不其然,在一个国外的网站上,发现了一篇有趣的文章:

http://scottandmichelle.net/scott/comments.html?entry=784

I spent a couple of sleepless hours last night writing a little Sensor Test for my new HTC Diamond. It’s a small app that lets you move a circle around the screen by tilting the device.

Exciting, eh? Well, the fun is in getting it to work. I asked HTC if they provide a development kit (SDK) for the tilt sensor, and they said “No”, so I had to figure it out myself by digging around (and trying to remember what I knew of ARM assembly). I’m just happy I managed to figure it out, and so others can write interesting games with it, I’m giving the source code to what I figured out away. Have fun, create something with it.

相当搞笑,这位哥们本来打算要求HTC提供这样的SDK开发包,想不到被HTC无情的拒绝了,于是一怒之下,把重力感应相关的库文件给反向工程了,并公开了源码。这下可好了,咱们可以开动大脑,设计更多的和重力相关的有趣的应用了。研究了这位外国哥们的代码,重力感应器相关的API,主要包含在一个叫做”HTCSensorSDK.dll”的动态库里面,该动态库主要输出的两个函数分别是:HTCSensorOpen和HTCSensorClose ,用于打开重力感应器和关闭重力感应器。当重力感应器打开之后,可以对手机当前位置的变化进行监视,其实是通过检测注册表的某个键值实现的,具体的路径在Software\HTC\HTCSensor\GSensor的EventChanged。在打开重力感应器的情况下,当这个键的值发生变化,意味着手机的位置已经发生了变动。手机位置的定义包括六种情况,以地平线位置作为参考,可分为:手机正面(屏幕)向上、手机正面(屏幕)向下、手机正面(屏幕)向左、手机正面(屏幕)向右、手机正面(屏幕)向前、手机正面(屏幕)向后。而这六种位置在注册表键EventChanged中均有不同的值表示。

为了方便应用,我将开启/关闭 重力感应器的代码抽取了出来,做成一个动态连接库,暴露的接口如下:

<span class="lnum">   1:  </span><span class="kwrd">extern</span> <span class="str">"C"</span> __declspec(dllexport) BOOL EnableGSensor();




<span class="lnum">   2:  </span><span class="kwrd">extern</span> <span class="str">"C"</span> __declspec(dllexport) BOOL DisableGSensor();

这样就能方便的开启和关闭重力感应器了。

下面就可以用简单的MFC Dialog程序来测试重力感应了:

定义注册表路径和被监视的键值

<span class="lnum">   1:  </span><span class="preproc">#define</span> SN_GSENSOR_ROOT     HKEY_LOCAL_MACHINE




<span class="lnum">   2:  </span><span class="preproc">#define</span> SN_GSENSOR_PATH     _T(<span class="str">"Software\\HTC\\HTCSensor\\GSensor"</span>)




<span class="lnum">   3:  </span><span class="preproc">#define</span> SN_GSENSOR_VALUE    _T(<span class="str">"EventChanged"</span>)

定义注册表值掩码,以及6个不同位置的值

<span class="lnum">   1:  </span><span class="preproc">#define</span> SN_GSENSOR_BITMASK  0xF










<span class="lnum">   2:  </span> 










<span class="lnum">   3:  </span><span class="preproc">#define</span> orIENTATION_LANDSCAPE           0










<span class="lnum">   4:  </span><span class="preproc">#define</span> orIENTATION_REVERSE_LANDSCAPE   1










<span class="lnum">   5:  </span><span class="preproc">#define</span> orIENTATION_PORTRAIT            2










<span class="lnum">   6:  </span><span class="preproc">#define</span> orIENTATION_UPSIDE_DOWN         3










<span class="lnum">   7:  </span><span class="preproc">#define</span> orIENTATION_FACE_DOWN           4










<span class="lnum">   8:  </span><span class="preproc">#define</span> orIENTATION_FACE_UP             5

定义注册表值变化的Windows Message类型

<span class="lnum">   1:  </span><span class="preproc">#define</span> WM_EVENTCHANGED (WM_USER + 1)

在消息映射宏中,定义响应自定义消息WM_EVENTCHANGED的处理函数

<span class="lnum">   1:  </span>ON_MESSAGE(WM_EVENTCHANGED,OnEventChanged)

这样,我们就可以在Dialog程序的初始化函数里面实现相应的代码:

<span class="lnum">   1:  </span>BOOL CTestDlg::OnInitDialog()










<span class="lnum">   2:  </span>{










<span class="lnum">   3:  </span>    CDialog::OnInitDialog();










<span class="lnum">   4:  </span> 










<span class="lnum">   5:  </span>    <span class="rem">// Set the icon for this dialog.  The framework does this automatically</span>










<span class="lnum">   6:  </span>    <span class="rem">//  when the application's main window is not a dialog</span>










<span class="lnum">   7:  </span>    SetIcon(m_hIcon, TRUE);            <span class="rem">// Set big icon</span>










<span class="lnum">   8:  </span>    SetIcon(m_hIcon, FALSE);        <span class="rem">// Set small icon</span>










<span class="lnum">   9:  </span> 










<span class="lnum">  10:  </span>    <span class="rem">// TODO: Add extra initialization here</span>










<span class="lnum">  11:  </span>    g_hSensorEvent = NULL;










<span class="lnum">  12:  </span>    










<span class="lnum">  13:  </span>    RegistryNotifyWindow(










<span class="lnum">  14:  </span>        SN_GSENSOR_ROOT, 










<span class="lnum">  15:  </span>        SN_GSENSOR_PATH, 










<span class="lnum">  16:  </span>        SN_GSENSOR_VALUE,










<span class="lnum">  17:  </span>        GetSafeHwnd(), 










<span class="lnum">  18:  </span>        WM_EVENTCHANGED, 










<span class="lnum">  19:  </span>        SN_GSENSOR, 










<span class="lnum">  20:  </span>        NULL, 










<span class="lnum">  21:  </span>        &g;_hSensorEvent);










<span class="lnum">  22:  </span> 










<span class="lnum">  23:  </span>        gSensorWrapper.EnableGSensor();










<span class="lnum">  24:  </span> 










<span class="lnum">  25:  </span>    <span class="kwrd">return</span> TRUE;  <span class="rem">// return TRUE  unless you set the focus to a control</span>










<span class="lnum">  26:  </span>}

RegistryNotifyWindow函数,通过监视注册表的指定路径下,指定键值的变化,向我们的窗口发送WM_EVENTCHANGED消息,而我们在消息映射宏中所定义的OnEventChanged函数,就用来响应和处理这样的自定义消息。

最后,在我们的OnEventChanged函数中,就可以获得当前手机的位置了:

<span class="lnum">   1:  </span>afx_msg LRESULT CHangupPhoneDlg::OnEventChanged(WPARAM wParam, LPARAM lParam)




<span class="lnum">   2:  </span>{




<span class="lnum">   3:  </span>        nLastEvent = (wParam & SN_GSENSOR_BITMASK);




<span class="lnum">   4:  </span>        




<span class="lnum">   5:  </span>        <span class="kwrd">switch</span> (nLastEvent)




<span class="lnum">   6:  </span>        {




<span class="lnum">   7:  </span>        <span class="kwrd">case</span> orIENTATION_LANDSCAPE:




<span class="lnum">   8:  </span>            szMessage = _T(<span class="str">"Last Event: 正面向右"</span>);




<span class="lnum">   9:  </span>            <span class="kwrd">break</span>;




<span class="lnum">  10:  </span>        <span class="kwrd">case</span> orIENTATION_REVERSE_LANDSCAPE:




<span class="lnum">  11:  </span>            szMessage = _T(<span class="str">"Last Event: 正面向左"</span>);




<span class="lnum">  12:  </span>            <span class="kwrd">break</span>;




<span class="lnum">  13:  </span>        <span class="kwrd">case</span> orIENTATION_PORTRAIT:




<span class="lnum">  14:  </span>            szMessage = _T(<span class="str">"Last Event: 正面向后"</span>);




<span class="lnum">  15:  </span>            <span class="kwrd">break</span>;




<span class="lnum">  16:  </span>        <span class="kwrd">case</span> orIENTATION_UPSIDE_DOWN:




<span class="lnum">  17:  </span>            szMessage = _T(<span class="str">"Last Event: 正面向前"</span>);




<span class="lnum">  18:  </span>            <span class="kwrd">break</span>;




<span class="lnum">  19:  </span>        <span class="kwrd">case</span> orIENTATION_FACE_DOWN:




<span class="lnum">  20:  </span>            szMessage = _T(<span class="str">"Last Event: 正面向下"</span>);




<span class="lnum">  21:  </span>            <span class="kwrd">break</span>;




<span class="lnum">  22:  </span>        <span class="kwrd">case</span> orIENTATION_FACE_UP:




<span class="lnum">  23:  </span>            szMessage = _T(<span class="str">"Last Event: 正面向上"</span>);




<span class="lnum">  24:  </span>            <span class="kwrd">break</span>;




<span class="lnum">  25:  </span>        <span class="kwrd">default</span>:




<span class="lnum">  26:  </span>            szMessage = _T(<span class="str">"Last Event: Unknown"</span>);




<span class="lnum">  27:  </span>            <span class="kwrd">break</span>;




<span class="lnum">  28:  </span>        }




<span class="lnum">  29:  </span> 




<span class="lnum">  30:  </span>        <span class="kwrd">this</span>->GetDlgItem(IDC_DISPLAY)->SetWindowTextW(szMessage);




<span class="lnum">  31:  </span> 




<span class="lnum">  32:  </span> 




<span class="lnum">  33:  </span>    <span class="kwrd">return</span> 0L;




<span class="lnum">  34:  </span>}

启动测试程序,翻转手机到不同的位置,就能在Dialog框中,实时看到当前手机位置状态,Cool!

测试程序比较简单,就不放上来了,把封装的重力感应器的动态库放上来,供有兴趣的同学下载。

可以进行测试的手机型号:多普达(Dopod) Touch Diamond、多普达(Dopod) Touch Pro 或者 HTC Touch Diamond 和 HTC Touch Pro.

我的开发测试环境: Windows Vista 64bit, Visual Studio 2008 SP1, Windows Mobile 6.0 Professional SDK.

点击下载此文件

C# IDE Mobile – Write your C# code anywhere!

发表于 2009-05-29 | 分类于 技术控 | | 阅读次数:
字数统计: 591 字 | 阅读时长 ≈ 2 分钟

最近败了个QWERTY全键盘的HTC Touch pro,全键盘的感觉不错,输入速度比以前靠触摸笔点屏幕快多了。装了个Python的Windows mobile版本,没事学着写Python玩玩。一日突发奇想,要是能在PPC手机上写C#的程序并能运行起来,那就太棒了。果然不出我所料,国外已经有大侠已经做好了这个东东,一个运行在Windows Mobile手机上的简单的C# IDE,让你可以随时在你的PPC手机上写C#的程序。这是作者自己实现的一个简单IDE,现在已经支持的功能如下:

  • 可以创建基于图形用户界面的程序
  • 可创建方法和类
  • 可以调用所有的.NET Compact Framework的类。
  • 执行文件操作
  • 运行进程
  • 使用.NET 2.0中的范型
  • 支持C#的控制语句,包括循环、条件判断……

IDE的使用非常简单,写入你的代码,然后可以立即运行,看到结果。

简单的例子,如下:

<span class="lnum">   1:  </span><span class="kwrd">using</span> System.Windows.Forms;




<span class="lnum">   2:  </span><span class="kwrd">namespace</span> TestNS




<span class="lnum">   3:  </span>{




<span class="lnum">   4:  </span>    <span class="kwrd">class</span> TestCL




<span class="lnum">   5:  </span>    {




<span class="lnum">   6:  </span>       <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> Main()




<span class="lnum">   7:  </span>       {




<span class="lnum">   8:  </span>            MessageBox.Show(<span class="str">"Hello Timothy!"</span>);




<span class="lnum">   9:  </span>       }




<span class="lnum">  10:  </span>    }




<span class="lnum">  11:  </span>}

点击菜单下面的Debug->Run,运行结果截图如下:

1

IDE自带一些简单的功能, 包括插入代码模板,编辑(复制、粘贴、剪切)功能,还支持插件功能。

2

软件下载地址: http://www.geocities.com/hrowson/wm5_software/cs_ide_mobile.zip

Code Sample: http://www.geocities.com/hrowson/wm5_software/cs_ide_mobile_samples.zip

用户手册、帮助文档地址: http://www.geocities.com/hrowson/wm5_software/cs_ide_mobile_manual/index.htm

作者主页:http://www.geocities.com/hrowson/wm5_software/index.htm

赶紧下载吧,write your C# code anywhere! 活活~~

1…303132…47
Timothy

Timothy

Timothy的技术博客,记录技术以及生活点滴

564 日志
8 分类
1187 标签
RSS
github twitter
Links
  • ZWWoOoOo
  • 花開未央
  • 守望轩
  • 大漠说程序
  • ChengBo
  • BlueAndHack
  • 程序员小辉
  • 子痕的博客
  • WoodenRobot
  • VPS大佬
  • 毕扬博客
  • VPSDad
  • 猫爪导航
  • ss1271的奋斗
  • Kian.Li
  • YoungForest
  • Fred's Blog
  • Jacklandrin
© 2025 Timothy
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4