摘要: 有了前两篇后,我们在这里面建立一个测试项目。简单的设备管理器:)界面如下图:源码项目下载地址:http://download.csdn.net/source/352079。 阅读全文
posted @ 2011-01-14 13:40 董雨 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 通过上一篇“通过API实现C#对硬件的控制(一)” 我们掌握了我们所需要的相关API知识点。为此,我们现在来构建我们自己的外部调用类:Externs。由于有上一篇的详细说明,该处不再一一说明相关的函数知识点。下面是该类的代码:using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace Hardware...{ /**//// summary /// 下列所需函数可参考MSDN中与驱动程序相关的API函数 /// /summary 阅读全文
posted @ 2011-01-14 13:39 董雨 阅读(381) 评论(0) 推荐(0) 编辑
摘要: 最近在做项目的过程中,涉及到对硬件启用及禁用的功能(在指定时间段内才能启用硬件)。因为C#自身对硬件的操作基本为零,为此,搜索了一下MSDN中与设备相关的API函数。还果然就有。下面一一列举出各函数的原型及相关的说明文档。并将其转为C#代码实现。函数一: RegisterDeviceNotification功能:注册设备或者设备类型,在指定的窗口返回相关的信息原型:HDEVNOTIFY WINAPI RegisterDeviceNotification( __in HANDLE hRecipient, __in LPVOID NotificationFilter, __in DWORD Fla 阅读全文
posted @ 2011-01-14 13:32 董雨 阅读(406) 评论(0) 推荐(0) 编辑
摘要: .net 框架程序可以通过静态 DLL 入口点的方式来访问本机代码库。DllImport 属性用于指定包含外部方法的实现的dll 位置。 DllImport 属性定义如下: namespace System.Runtime.InteropServices {  [AttributeUsage(AttributeTargets.Method)]  public class DllImportAttribute: System.Attribute  { public DllImportAttribute(string dllName) {...} public CallingConvention 阅读全文
posted @ 2011-01-14 13:31 董雨 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 转自:http://hacker.cnblogs.com/archive/2004/08/12/32563.aspx1, PInvoke什么意思? Platform Invocation Services2, 干什么用? 导入外部函数?什么是外部函数,就是不属于.Net托管的函数。3,如何用?看下面的例子。用[DllImport(dllname)]来实现,但是首先要把System.Runtiime.InteropServices using进来。但是不using也行,就要敲全称,随你便了。[DllImport("user32.dll")]staticexternintMessageBoxA(i 阅读全文
posted @ 2011-01-14 13:30 董雨 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 前言在我们应用程序开发过程中,经常会遇到一些问题,需要使用多线程技术来加以解决。本文就是通过几个示例程序给大家讲解一下多线程相关的一些主要问题。执行长任务操作  许多种类的应用程序都需要长时间操作,比如:执行一个打印任务,请求一个 Web Service 调用等。用户在这种情况下一般会去转移做其他事情来等待任务的完成,同时还希望随时可以监控任务的执行进度。?/P  下面的代码片断示例了当长任务执行时用户界面是如何被更新的。// 显示进度条void ShowProgress( int totalStep, int currentStep ){_Progress.Maximum = totalS 阅读全文
posted @ 2011-01-14 13:28 董雨 阅读(439) 评论(0) 推荐(0) 编辑
摘要: 编程入门文章:http://www.bianceng.cn/Programming/F_Sharp/index3.htm开源站:www.codeplex.com www.codeproject.com www.sourcecode.com www.OpenNetCf.com/orgMSDN网络广播首页:http://msdn.microsoft.com/zh-cn/dd796167.aspxGoogleEarth COM API:http://earth.google.com/comapi/GoogleMap:http://code.google.com/p/donetgooglemapsap 阅读全文
posted @ 2011-01-14 13:23 董雨 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 我们身在何处?前面写过的随笔主要关注的是F#与FP的基本概念,对UI涉及很少。我们知道,没有UI就没法与用户进行交互,所以写两篇随笔来了解一下这方面的内容。本文主要关注的是如何使用F#开发WinForm应用程序,后面还会介绍如何使用F#开发ASP.NET应用程序。不过说真的,我对WinForm开发了解不多,所以如果有不妥之处,欢迎您的指正。WinForm中的基础类型是System.Windows.Forms.Form类,通过它我们可以创建一个窗体,在窗体上我们可以根据需要进行绘制。绘制的时候我们可以选择使用.NET提供的API手工“画”出一些图形,比如像素着色、直线、圆等等,也可以使用.NET 阅读全文
posted @ 2011-01-14 13:07 董雨 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常情况下,一个单元测试(用例)用于判断某个特定条件(或场景)下特定函数的行为。如果想对单元测试的好处有更多的了解,可以看一下单元测试实战。在.NET社区内,NUnit无疑是最经典的单元测试工具,要了解它的用法,建议看一下园子里的一篇很棒的文章NUnit详细使用方法。本文对此不再赘述。另外MbUnit作为后起之秀,也很值得一试。在F#中, LOP(Language-OrientedProgramming)是它的一个亮点,而FsUnit则是LOP的一个很好的实践。FsUnit使用F#开发,用它编写的测试用例会接 阅读全文
posted @ 2011-01-14 13:06 董雨 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 前言是的,我们已经学习了如何在F#中使用各种范式(函数式、命令式、面向对象)进行编程。但是目前还仅限于在单个模块内编写,要知道,不管是采用哪种语言或者范式编程,如果项目规模大了,都不适合把所有代码放在单个模块内。在常规的.NET项目中(比如C#+ASP.NET),我们往往会选择使用Solution的概念作为整个(独立)问题域的解决方案,Solution以下则是Project、File。这些概念在物理上往往表现为程序集(类库或可执行程序)、类文件等,如果项目和文件数量较多,就该好好考虑如何在组织它们。下面从这三个层次上分别来讨论一下。Solution层次这里主要考虑的是Project之间的相互关 阅读全文
posted @ 2011-01-14 13:04 董雨 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 列表(List)是函数式编程(FP)的基础。事实上,FP的重要代表Lisp的名字即源自“ListProcessing”,它的发明者JohnMcCarthy于1960年发表的论文向我们展示了,在只给定几个简单的操作符和一个表示函数的记号的基础上,如何构造出一个完整的编程语言,他的主要思想之一是用一种简单的数据结构列表来表示代码和数据。链表(Linked list)是Lisp的主要数据结构之一,并且Lisp的源代码本身也由列表构成。F#中的列表类型表示为链表,它与C#中的数组、泛型ListT类型有着明显的不同。链表可以用下面的图表示:首先我们来看一下FP中列表的基本操作(其中的代码都由F#实现 阅读全文
posted @ 2011-01-14 13:04 董雨 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 关于函数式编程(Functional programming,FP)函数式编程(FP)是一种编程范式,它计算机的计算过程视为函数运算,避免状态和数据的修改。与命令式编程相比,它更强调函数的运用。λ运算构建了函数式编程的基础。重要的函数式编程语言包括Lisp、Scheme、Erlang、Haskell、ML、OCaml等,微软则在2005年引入了F#。此外,包括C/C++/C#/Python/Javascript等很多语言也提供了对FP的部分支持。由此我们可以得出一个结论,随着现实问题复杂度的增加,单一的编程范式很难满足需要了。我们需要对FP有更多的了解,问题是学习哪种语言呢?作为一个.NET程 阅读全文
posted @ 2011-01-14 13:03 董雨 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 类的继承在前面(面向对象(中))介绍过的对象表达式中,已经涉及到了类的继承,我们可以覆盖类的成员实现,然后创建新类的实例。这一节里,我们来看看常规的继承机制,熟悉C#的开发人员会感到更亲切。F# Code - 类的继承#lighttype Base = class  val state : int  new() = { state = 0}endtype Sub = class  inherit Base  val otherState : int  new() = { otherState = 1 }endlet myObj = new Sub()printfn "myObj.state = 阅读全文
posted @ 2011-01-14 13:01 董雨 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 对象表达式(Object Expressions)F#中的OOP语法很简洁,而对象表达式则正是这种简洁性的核心所在。通过对象表达式,我们可以创建抽象类或接口的轻量级实现,也可以对一个具体的类进行继承。换言之,可以在实现抽象类或接口,或者继承具体类的同时创建新类型的一个实例。下面来看如何对泛型接口IComparer’T应用对象表达式。F# Code#lightopen Systemopen System.Collections.Genericlet revStringComparer =  { new IComparerstring    with      Compare(s1, s2 阅读全文
posted @ 2011-01-14 13:00 董雨 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 面向对象编程概述(OOP)面向对象编程是当今最流行的编程范式,看看TIOBE 2008年9月的编程语言排行榜就很清楚了:在这些主流语言中,除了C,都或多或少地提供对OOP的支持,而Java和C#更是纯粹的面向对象编程语言,C还有一个子集——Objective-C。值得一提的是Delphi的强势回归。下图则是各个编程范式的占有率:OOP编程范式是指使用“对象”及“对象”之间的交互来设计应用程序。OOP的基本概念包括类,对象,实例,方法,消息传递,继承,抽象,封装,多态和解耦(Decoupling)等。“一切皆是对象”这句话曾盛极一时,它也衍生出了像设计模式这样的重要理念。关于面向对象编程,需要很 阅读全文
posted @ 2011-01-14 12:57 董雨 阅读(398) 评论(0) 推荐(0) 编辑
摘要: 控制流程(Control Flow)在函数式编程(中)一文中,我们初步了解了F#在函数式编程范式下的控制流程,即if, elif, then, else等组成的结构。在命令式编程范式下,F#提供了更多的控制流程支持,包括if,while和for。在命令式编程范式下的if结构与函数式编程下对应结构的主要差别在于,对于if分支,调用的函数为unit类型(即无返回值),而且并不要求必须使用else分支:F# Codeif System.DateTime.Now.DayOfWeek = System.DayOfWeek.Thursday then  print_endline "Thursday pl 阅读全文
posted @ 2011-01-14 12:56 董雨 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 在本系列的第二部分(函数式编程上、中、下)中,我们了解了如何使用F#进行纯粹的函数式编程。但是在一些情况下,比如I/O,几乎不能避免改变状态,也就是说会带来sideeffect。F#并不强求你以无状态的方式编写程序,它提供了可修改(mutable)的标识符来解决这类问题,同时它还提供了其它的程序结构以支持命令式编程。现在就来对这些特性探个究竟。首先是unit类型,这种类型表示“没有值”。然后是F#如何处理可修改的值。最后来看看如何在F#中使用.NET类库,包括如何调用静态方法、创建对象并使用其成员、使用类的索引器和事件以及F#中的|操作符。unit类型没有参数和返回值的函数的类型为unit, 阅读全文
posted @ 2011-01-14 12:55 董雨 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 模式匹配(Pattern Matching)模式匹配允许你根据标识符值的不同进行不同的运算。有点像一连串的if...else结构,也像C++和C#中的switch,但是它更为强大和灵活。看下面Lucas序列的例子,Lucas序列定义跟Fibonacci序列一样,只不过起始值不同:Codelet rec luc x =  match x with  | x when x = 0 - failwith "value must be greater than zero"  | 1 - 1  | 2 - 3  | x - luc(x - 1) + luc(x - 2)printfn "(lu 阅读全文
posted @ 2011-01-14 12:54 董雨 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 操作符(Operator)F#中,可把操作符看作一种函数调用的更为优雅的方式。操作符有两种:前缀(prefix)和中缀(infix),前者接受一个操作数(operand),出现在操作数之前;后者接受两个或多个操作数,出现在头两个操作数之间。F#提供了丰富的操作符集,可用于数字、布尔值、字符串和集合类型。这些操作符数量甚众,限于篇幅,在此不再一一详解。本文将着重介绍如何使用和定义操作符。类似于C#,F#的操作符也可以重载,也就是说,我们可以将不同的类型用于同一操作符,如“+”;但是与C#不同的是,各个操作数必须为相同的类型。F#的操作符重载规则与C#类似,因此任何BCL或者使用C#编写的.NET 阅读全文
posted @ 2011-01-14 12:52 董雨 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 函数式编程范式简介F#主要支持三种编程范式:函数式编程(Functional Programming,FP)、命令式编程(ImperativeProgramming)和面向对象(Object-Oriented,OO)的编程。回顾它们的历史,FP是最早的一种范式,第一种FP语言是IPL,产生于1955年,大约在Fortran一年之前。第二种FP语言是Lisp,产生于1958,早于Cobol一年。Fortan和Cobol都是命令式编程语言,它们在科学和商业领域的迅速成功使得命令式编程在30多年的时间里独领风骚。而产生于1970年代的面向对象编程则不断成熟,至今已是最流行的编程范式。有道是“江山代有 阅读全文
posted @ 2011-01-14 12:50 董雨 阅读(291) 评论(0) 推荐(0) 编辑