??xml version="1.0" encoding="utf-8" standalone="yes"?> 在用TCP协议Ӟ一般服务端q程先用socket调用得到一个描q?W,然后使用bind调用一个名字与socket描述W连接v来,对于Internet域就是将Internet地址联编到socket。之后,服务?使用listen调用指出{待服务h队列的长度。然后就可以使用accept调用{待客户端发赯接,一般是d{待q接Q一旦有客户端发?gu)接?acceptq回客户的地址信息Qƈq回一个新的socket描述W,该描q符与原先的socket有相同的Ҏ(gu),q时服务端就可以使用q个新的 socketq行d操作?jin)。一般服务端可能在acceptq回后创Z个新的进E进行与客户的通信Q父q程则再到accept调用处等待另一个连接。客 L(fng)q程一般先使用socket调用得到一个socket描述W,然后使用connect向指定的服务器上的指定端口发赯接,一旦连接成功返回,p?已经建立?jin)与服务器的q接Q这时就可以通过socket描述W进行读写操作了(jin)?/p>
.NetFrameWork为Socket通讯提供?jin)System.Net.Socket命名I间Q在q个命名I间里面有以下几个常用的重要cd别是: ·Socketc?q个低层的类用于理q接QW(xu)ebRequestQTcpClient和UdpClient在内部用这个类?/p>
·NetworkStreamc?q个cL从Streamz出来的,它表C来自网l的数据?/p>
·TcpClientc?允许创徏和用TCPq接 ·TcpListenerc?允许监听传入的TCPq接h ·UdpClientc?用于UDP客户创徏q接(UDP是另外一UTCP协议Q但没有得到q泛的用,主要用于本地|络) 下面我们来看一个基于Socket的双机通信代码的C#版本 首先创徏Socket对象的实例,q可以通过Socketcȝ构造方法来实现Q?/p>
public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType); 其中QaddressFamily 参数指定 Socket 使用的寻址Ҏ(gu)QsocketType 参数指定 Socket 的类型,protocolType 参数指定 Socket 使用的协议? 下面的示例语句创Z?SocketQ它可用于在Z TCP/IP 的网l(?InternetQ上通讯?/p>
Socket temp = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 若要使用 UDP 而不?TCPQ需要更改协议类型,如下面的CZ所C:(x) Socket temp = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 一旦创?SocketQ在客户端,你将可以通过ConnectҎ(gu)q接到指定的服务器(你可以在ConnectҎ(gu)前Bind端口Q就是以指定的端?发vq接Q如果不事先Bind端口L(fng)话,pȝ?x)默认?024?000随机l定一个端口号Q,q过SendҎ(gu)向远E服务器发送数据,而后可以通过 Receive从服务端接收数据Q而在服务器端Q你需要用BindҎ(gu)l定所指定的接口Socket与一个本地终l点相联Qƈ通过ListenҎ(gu)?听该接口上的hQ当侦听到用L(fng)的连接时Q调用Accept完成q接的操作,创徏新的Socket以处理传入的q接h。用完 Socket 后,??Close Ҏ(gu)关闭 Socket? 可以看出Q以上许多方法包含EndPointcd的参敎ͼ在Internet中, TCP/IP 使用一个网l地址和一个服务端口号来唯一标识讑֤。网l地址标识|络上的特定讑֤Q端口号标识要连接到的该讑֤上的特定服务。网l地址和服 务端口的l合UCؓ(f)l结点,?.NET 框架中正是由 EndPoint c表C个终l点Q它提供表示|络资源或服务的抽象Q用以标志网l地址{信 息?Net同时也ؓ(f)每个受支持的地址族定义了(jin) EndPoint 的子代;对于 IP 地址族,该类?IPEndPoint。IPEndPoint cd含应用程序连接到L上的服务所需的主机和端口信息Q通过l合服务的主机IP地址和端口号QIPEndPoint cdŞ成到服务的连接点?/p>
用到IPEndPointcȝ时候就不可避免地涉?qing)到计算机IP地址QSystem.Net命名I间中有两种cd以得到IP地址实例Q? ·IPAddressc:(x)IPAddress cd含计机?IP |络上的地址。其ParseҎ(gu)可将 IP 地址字符串{换ؓ(f) IPAddress 实例。下面的语句创徏一?IPAddress 实例Q? IPAddress myIP = IPAddress.Parse("192.168.0.1"); 需要知道的是:(x)Socket cL持两U基本模式:(x)同步和异步。其区别在于Q在同步模式中,按块传输Q对执行|络操作的函敎ͼ?Send ?nbsp; ReceiveQ的调用一直等到所有内容传送操作完成后才将控制q回l调用程序。在异步模式中,是按位传输,需要指定发送的开始和l束。同步模式是最?用的模式Q我们这里的例子也是使用同步模式?/p>
// 客户?/p>
服务端:(x) 客户?/p>
TcpClient tcpClient=new TcpCLient(LIP,端口?; 服务?/p>
TcpListener tcpListener=new TcpListener(监听端口); 服务端用TcpListener监听,然后把连接的对象实例化ؓ(f)一个TcpClient,调用TcpClient.GetStream()Ҏ(gu),q回|络实例化Z个NetworlStream?下面是用流的方法进行Send,Receive 如果是UdpClient的话,q接UdpClient实例?然后调用UdpClient的Send和ReceiveҎ(gu),需要注意的? UdpClient没有q回|络的Ҏ(gu),是说没有GetStreamҎ(gu),所以无法流?而且使用Udp通信的时?不要服务器监听?/p>
现在我们大致?jin)解?Net Socket通信的流E,下面我们来作一个稍微复杂点的程序,一个广播式的C/S聊天E序?/p>
客户端设计需要一?个ListBoxQ用于显C天内容,一个TextBox输入你要说的话,一个Button发送留aQ一个Button建立q接?/p>
点击建立q接的Button后出来一个对话框Q提C入连接服务器的IPQ端口,和你的昵Uͼ启动一个接受线E,负责接受从服务器传来的信息ƈ昄在ListBox上面?/p>
服务器端2个ButtonQ一个启动服务,一个T掉已建立q接的客L(fng)Q一个ListBox昄q接上的客户端的Ip和端口?/p>
比较重要的地Ҏ(gu)字符串编码的问题Q需要先把需要传送的字符串按照UTF8~码Q然后接受的时候再q原成ؓ(f)GB2312Q不然中文显CZ(x)是ؕ码?/p>
q有一个就是接收线E,我这里简单写成一个While(ture)循环Q不断判断是否有信息入Q有接Ӟq显C在ListBox上,q里有问题,?Net2.0里面Q交错线E修改窗体空间属性的时候会(x)引发一个异常,不可以直接修改,需要定义一个委托来修改? 当客L(fng)需要断开q接的时候,比如点击H体右上角的XXQ就需要定义一个this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Closing);Q?Net2.0 是FormClosingpȝ事gQ,在Closing()函数里面Q发送Close字符l服务端Q服务器判断循环判断所有的q接上的客户端传来的信息Q?如果是以Close开_(d)断开与其的连接。看到这里,读者就?x)问了(jin),如果我在聊天H口输入Close是不是也断开q接呢?不是的,在聊天窗口输入的信息?l服务器的时候开头都要加上Ip信息和昵Uͼ所以不?x)冲H?nbsp; using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
namespace ClientDemo
{
class Program
{
static void Main(string[] args)
{
try
{
int port = 2010;
string host = "127.0.0.1";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口{化ؓ(f)IPEndPoint实例
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创徏一个Socket
Console.WriteLine("Conneting
");
c.Connect(ipe);//q接到服务器
string sendStr = "hello!This is a socket test";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
Console.WriteLine("Send Message");
c.Send(bs, bs.Length, 0);//发送测试信?/span>
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信?/span>
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
Console.WriteLine("Client Get Message:{0}", recvStr);//昄服务器返回信?/span>
c.Close();
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
Console.WriteLine("Press Enter to Exit");
Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
namespace ServerDemo
{
class Program
{
static void Main(string[] args)
{
try
{
int port = 2010;
string host = "127.0.0.1";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 创徏一个SOKCETcȝ实例
s.Bind(ipe); // l定端口
s.Listen(0); // 开始监?/span>
Console.WriteLine("Wait for connect");
Socket temp = s.Accept();// 为新接创建新的Socket
Console.WriteLine("Get a Connect");
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = temp.Receive(recvBytes, recvBytes.Length, 0); // 接收客户端的信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
Console.WriteLine("Server Get Message:{0}", recvStr);
string sendStr = "OK! Client Send Message Successful!";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
temp.Send(bs, bs.Length, 0);
temp.Close();
s.Close();
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
Console.WriteLine("Press Enter to Exit");
Console.ReadLine();
}
}
}
面的例子是用的Socketc,System.Net.Socket命名I间q提供了(jin)两个抽象高cTCPClient和UDPClient和用于通讯处理的NetWorkStream,让我们看下例?/p>
NetworkStream ns=tcp.Client.GetStream();
tcpListener.Start();
TcpClient tcpClient=tcpListener.AcceptTcpClient();
NetworkStream ns=tcpClient.GetStream();
本文来自CSDN博客Q{载请标明出处Q?a >http://blog.csdn.net/dzfb/archive/2006/12/21/1452139.aspx
]]>
在Settings.settings文g中定义配|字Dc(din)把作用范围定义为:(x)User则运行时可更改,Applicatiion则运行时不可更改。可以用数据网D图,很方便;
2、读取配|?/font>
text1.text = Properties.Settings.Default.FieldName;
//FieldName是你定义的字D?/font>
3、修改和保存配置
Properties.Settings.Default.FieldName = "server";
Properties.Settings.Default.Save();//使用SaveҎ(gu)保存更改
注意Q当讄scope为User时他的配|放?C:\Documents and Settings\LocalService\Local Settings\Application Data\在这个目录下或子目录user.config 配置文g中?/font>
4Q装?拆箱是什么?
装箱Q用于在垃圾回收堆中存储值类型。装是值类型到 object cd或到此值类型所实现的Q何接口类型的隐式转换?
拆箱Q从 object cd到值类型或从接口类型到实现该接口的值类型的昑ּ转换?
5Qؓ(f)何需要装?(Z要将值类型{为引用类型?)
一U最普通的场景是,调用一个含cd为Object的参数的Ҏ(gu)Q该Object可支持Q意ؓ(f)型,以便通用。当你需要将一个值类?如Int32)传入Ӟ需要装?
另一U用法是Q一个非泛型的容器,同样是ؓ(f)?jin)保证通用Q而将元素cd定义为Object。于是,要将值类型数据加入容器时Q需要装?
6Q装?拆箱的内部操作?
装箱Q?
对值类型在堆中分配一个对象实例,q将该值复制到新的对象中。按三步q行?
W一步:(x)新分配托堆内存(大小为值类型实例大加上一个方法表指针和一个SyncBlockIndex)?
W二步:(x)值类型的实例字段拯到新分配的内存中?
W三步:(x)q回托管堆中新分配对象的地址。这个地址是一个指向对象的引用?jin)?
有hq样理解Q如果将Int32装箱Q返回的地址Q指向的是一个Int32。我认ؓ(f)也不是不能这L(fng)解,但这实又有问题Q一来它不全面,二来指向Int32q没说出它的实质(在托堆??
拆箱Q?br>(g)查对象实例,保它是l定值类型的一个装倹{将该g实例复制到值类型变量中?
有书上讲Q拆只是获取引用对象中指向值类型部分的指针Q而内Ҏ(gu)贝则是赋D句之触发。我觉得qƈ不要紧。最关键的是(g)查对象实例的本质Q拆和装箱的类型必需匚wQ这一点上Q在IL层上Q看不出原理何在Q我的猜,或许是调用了(jin)cMGetType之类的方法来取出cdq行匚w(因ؓ(f)需要严格匹??
7Q装?拆箱Ҏ(gu)行效率的影响
昄Q从原理上可以看出,装箱Ӟ生成的是全新的引用对象,q会(x)有时间损耗,也就是造成效率降低?
那该如何做呢Q?
首先Q应该尽量避免装?
比如上例2的两U情况,都可以避免,在第一U情况下Q可以通过重蝲函数来避免。第二种情况Q则可以通过泛型来避免?
当然Q凡事ƈ不能l对Q假设你x造的代码为第三方E序集,你无法更改,那你只能是装׃(jin)?
对于装箱/拆箱代码的优化,׃C#中对装箱和拆都是隐式的Q所以,Ҏ(gu)的方法是对代码进行分析,而分析最直接的方式是?jin)解原理l何查看反编译的IL代码。比如:(x)在@环体中可能存在多余的装箱Q你可以单采用提前装方式进行优化?
8Q对装箱/拆箱更进一步的?jin)?
装箱/拆箱q不如上面所讲那么简单明?jin),比如Q装时Q变为引用对象,?x)多Z个方法表指针Q这?x)有何用处呢Q?
我们可以通过CZ来进一步探讨?
举个例子?
Struct A : ICloneable
{
public Int32 x;
public override String ToString() {
return String.Format(”{0}”,x);
}
public object Clone() {
return MemberwiseClone();
}
}
static void main()
{
A a;
a.x = 100;
Console.WriteLine(a.ToString());
Console.WriteLine(a.GetType());
A a2 = (A)a.Clone();
ICloneable c = a2;
Ojbect o = c.Clone();
}
5.0Qa.ToString()。编译器发现A重写?jin)ToStringҎ(gu)Q会(x)直接调用ToString的指令。因为A是值类型,~译器不?x)出现多态行为。因此,直接调用Q不装箱?注:(x)ToString是A的基cSystem.ValueType的方?
5.1Qa.GetType()QGetType是承于System.ValueType的方法,要调用它Q需要一个方法表指针Q于是a被装箱Q从而生成方法表指针Q调用基cȝSystem.ValueType?补一句,所有的值类型都是承于System.ValueType??
5.2Qa.Clone()Q因为A实现?jin)CloneҎ(gu)Q所以无需装箱?
5.3QICloneable转型Q当a2{为接口类型时Q必装,因ؓ(f)接口是一U引用类型?
5.4Qc.Clone()。无需装箱Q在托管堆中对上一步已装箱的对象进行调用?
附:(x)其实上面的基于一个根本的原理Q因为未装箱的值类型没有方法表指针Q所以,不能通过值类型来调用其上l承的虚Ҏ(gu)。另外,接口cd是一个引用类型。对此,我的理解Q该Ҏ(gu)表指针类似C++的虚函数表指针,它是用来实现引用对象的多态机制的重要依据?
9Q如何更改已装箱的对? 1、首先从托管堆中为新生成的引用对象分配内存?/p>
2、然后将值类型的数据拯到刚刚分配的内存中?/p>
3、返回托堆中新分配对象的地址?/p>
可以看出Q进行一ơ装pq行分配内存和拷贝数据这两项比较影响性能的操作?/p>
引用内型{换ؓ(f)值内型,需要进行拆操?unboxing)Q?/p>
1、首先获取托堆中属于值类型那部分字段的地址Q这一步是严格意义上的拆箱?/p>
2、将引用对象中的值拷贝到位于U程堆栈上的值类型实例中?/p>
l过q?步,可以认ؓ(f)是同boxing是互反操作。严格意义上的拆,q不影响性能Q但伴随q之后的拯数据的操作就?x)同boxing操作中一样媄(jing)响性能?br>
对于已装q对象Q因为无法直接调用其指定Ҏ(gu)Q所以必d拆箱Q再调用Ҏ(gu)Q但再次拆箱Q会(x)生成新的栈实例,而无法修改装对象。有Ҏ(gu)吧,感觉在说l口令。还是D个例子来_(d)(x)(在上例中q加changeҎ(gu))
public void Change(Int32 x) {
this.x = x;
}
调用Q?
A a = new A();
a.x = 100;
Object o = a; //装箱成oQ下面,x变o的倹{?
((A)o).Change(200); //Ҏ(gu)?jin)吗Q没Ҏ(gu)?
没改掉的原因是o在拆时Q生成的是(f)时的栈实例AQ所以,改动是基于(f)时A的,q未改到装箱对象?
(附:(x)在托C++中,允许直接取加拆箱时第一步得到的实例引用Q而直接更改,但C#不行?
那该如何是好Q?
嗯,通过接口方式Q可以达到相同的效果?
实现如下Q?
interface IChange {
void Change(Int32 x);
}
struct A : IChange {
…
}
调用Q?
((IChange)o).Change(200);//Ҏ(gu)?jin)吗Q改掉了(jin)?
为啥现在可以改?
在将o转型为IChangeӞq里不会(x)q行再次装箱Q当然更不会(x)拆箱Q因为o已经是引用类型,再因为它是IChangecdQ所以可以直接调用ChangeQ于是,更改的也是已装对象中的字D了(jin)Q达到期望的效果?br>
10?/strong>--------------------------
值类型{换ؓ(f)引用cdQ需要进行装操?boxing)Q?/p>
11?/strong>-------------------------
NET的所有类型都是由基类System.Objectl承q来的,包括最常用的基cdQint, byte, shortQbool{等Q就是说所有的事物都是对象。如果申明这些类型得时候都在堆(HEAP)中分配内存,?x)造成极低的效率!(个中原因以及(qing)关于堆和栈得区别?x)在另一里单独得说_(d))
.NET如何解决q个问题得了(jin)Q正是通过类型分成值型(value)和引用型(regerencetype)QC#中定义的值类型包括原cdQ?span style="COLOR: green">Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、DecimalQ、枚?enum)、结?struct)Q引用类型包括:(x)cR数l、接口、委托、字W串{?br>值型是在栈中分配内存,在申明的同时初始化Q以保数据不ؓ(f)NULLQ?br>引用型是在堆中分配内存,初始化ؓ(f)nullQ引用型是需要GARBAGE COLLECTION来回收内存的Q值型不用Q超Z(jin)作用范围Q系l就?x)自动释放?br>下面来说装和拆箱的定义!
装箱是隐式的将一个值型转换为引用型对象。比如:(x)
int i=0;
Syste.Object obj=i;
q个q程是装箱Q就是将i装箱Q?br>拆箱是一个引用型对象转换成Q意值型Q比如:(x)
int i=0;
System.Object obj=i;
int j=(int)obj;
q个q程?句是i装箱Q后一句是obj拆箱Q?/p>
]]>
WMI Performance Adapter
默认?Ҏ(gu)务是止?
本文?/span>VC6.0对话框应用程序ؓ(f)例,当鼠标在按钮上移动、按下或者弹h昄按钮功能提示文本Q本文将在按钮上昄功能提示文本Q?font face="Times New Roman">“IT知道|?/font>”?/font>
?font face="Times New Roman">CXXXDlg.h文g中定义:(x)
public:
CToolTipCtrl m_openToolTip;
?font face="Times New Roman">CXXXDlg.cpp?/font>OnInitDialog()中初始化Q?nbsp;
m_openToolTip.Create(this);
m_openToolTip.AddTool( GetDlgItem(IDC_BOTTON), "IT知道|?/font>" );
m_openToolTip.SetDelayTime(200);
m_openToolTip.SetTipTextColor( #0000ff );
m_openToolTip.SetTipBkColor( #ffffff);
m_openToolTip.Activate(TRUE);
重蝲函数PreTranslateMessage
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
switch(pMsg->message)
{
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_MOUSEMOVE:
m_openToolTip.RelayEvent(pMsg);
}
return CDialog::PreTranslateMessage(pMsg);
}
所以需要在机器上安装了(jin)EVC4.0和SP4Q结果运行程序出玎ͼ(x)
"One or more
files from the Emulator for Windows CE installation is missing. Please
reinstall Emulator for Windows CE and try again."
解决办法Q按照上面的Ҏ(gu)q入讑֤理器-Q高U-Q启动和故障恢复(选择讄)->在启动和故障恢复对话框中选择~辑-> boot.ini 中noexcute修改为execute 然后重启机器可以了(jin)?到此我们已经完成开发环境的搭徏?/font>
微Y的安装步骤安?
ActiveSync->eVC4->eVC4 sp4->smartphone SDK->.net framework->模拟器imagesQ在q行安装前,(zhn)先查看注意事项?/font>
开发工具下载地址
1QeVC4.0,下蝲地址Q?br>http://download.microsoft.com/download/c/3/f/c3f8b58b-9753-4c2e-8b96-2dfe3476a2f7/eVC4.exe
http://download.microsoft.com/download/a/7/3/a735c7fb-dcbd-429f-9090-d09b3b15d3fa/evc4sp4.exe
eVC序列P(x)TRT7H-KD36T-FRH8D-6QH8P-VFJHQ
2Qsmartphone SDKQpacket PC SDK下蝲地址Q?/font>
smartphone 2003 SDK:
http://www.microsoft.com/downloads/details.aspx?FamilyId=A6C4F799-EC5C-427C-807C-4C0F96765A81&displaylang=en
packet PC 2003 SDK:
http://microsoft.com/downloads/details.aspx?FamilyId=9996B314-0364-4623-9EDE-0B5FBB133652&displaylang=en
4Q安装image文gQ安装完后你q没有发C的模拟器变成中文的,q时需要如下操作:(x)
C:\Program Files\Pocket PC 2003 Emulation\CHS\Pocket_PC\PPC_2003_CHS.bin5,注意事项Q?/strong>
要保证你的VBS脚本服务器能正常q行Q网上很多h装不
成功Q都是因为VBS脚本没有正常执行。如果你装了(jin)解霸Q一定要注意Q因U解怼(x)更改
VBS文g的打开方式Q最好是把解霸先卸蝲Q卸载后再进?#8220;文g多w项”?#8220;文gcd”中恢复VBS的默认打开方式。手动更Ҏ(gu)开方式好像不行?br>如果你安装完后,发现q个错误QCVTRES : fatal error CVT1102: out of memory。请用安装目录下面的\Common\EVC\Bin\CVTRES.EXE覆盖EVC\wce420\bin\下面的同名文件试?/font>
其中Chinese (Simplified) Emulation ImagesQ是Pocket PC 2003 SDK的中文印象文Ӟ(j)不能昄中文的问题把英文模拟器对应的快捷方式攑ֈ中文模拟器的目录下,改一下里面的SKIN和BIN文g路径Q运行一下,再把 EVC打开Q在configure platform manager中设|一下连C文模拟器上就可以?jin)?/font>
转自:http://www.2guys.cn/collection/17461620481620.html
l常有朋友想学习(fn) Windows Mobile
开发,体验Ud开发的乐趣Q但不知道从哪里下蝲各种开发工具和学习(fn)资料。于是我整理?jin)一个列表,里面包含?jin)各个版本?Windows Mobile
SDK, .NET Compact Framework, SQL Server CE, Device Emulator, Emulator
Image 和学?fn)资料的下蝲链接?br>
如果你发现还有其他不错的工具没有在这个列表中Q请告诉我,我会(x)把它加入到这个列表中Q让更多的h用上?br>
Windows Mobile 2003 SDK for Pocket PC (直接下蝲)
Windows Mobile 2003 SDK for Smartphone
Windows Mobile 5.0 SDK for Pocket PC (直接下蝲)
Windows Mobile 5.0 SDK for Smartphone
Windows Mobile 6 SDK
Windows CE 5.0: Standard Software Development Kit (SDK)
.NET Compact Framework 1.0 SP3 Redistributable
.NET Compact Framework 2.0 Service Pack 1 Redistributable
.NET Compact Framework 2.0 Service Pack 1 Patch
.NET Compact Framework 2.0 Service Pack 2 Redistributable
.NET Compact Framework 3.5 Redistributable
Power Toys for .NET Compact Framework 3.5
SQL Server CE 2.0 Server Tools SP4
SQL Server 2005 Compact Edition
SQL Server 2005 Compact Edition Tools for Visual Studio 2005 Service Pack 1
SQL Server 2005 Compact Edition Server Tools
SQL Server 2005 Compact Edition Books Online (March 2007)
SQL Server 2005 Compact Edition Access Database Synchronizer
SQL Server Compact 3.5 for Windows Desktop
SQL Server Compact 3.5 Books Online and Samples
Synchronization Services for ADO.NET Books Online
ADOCE 3.1 for Windows 3.0 SDKs
Standalone Device Emulator 1.0 with Windows Mobile OS Images
Microsoft Device Emulator 2.0 Standalone
Virtual Machine Network Driver for Microsoft Device Emulator
Microsoft Windows CE 5.0 Device Emulator
Emulator Images for Windows Mobile 2003-based Pocket PC Development
Emulator Images for Windows Mobile 2003-based Smartphone Development
Emulator Images for Windows Mobile 2003 Second Edition-based Pocket PC Development
Emulator Images for Windows Mobile 2003 Second Edition-based Smartphone Development
Localized Windows Mobile 5.0 Pocket PC Emulator Images
Localized Windows Mobile 5.0 Smartphone Emulator Images
eMbedded Visual C++ 4.0
eMbedded Visual C++ 4.0 SP4
OpenNETCF Smart Device Framework v1.4
OpenNETCF Smart Device Framework v2.0
Mobile Client Software Factory – July 2006
Architecture Overview for Mobile Applications
UI Design Considerations in Mobile Applications
Designing Mobile Applications in an Occasionally-Connected World
Microsoft Windows Mobile Device Center 6.1 for Windows Vista (32-bit)
Microsoft Windows Mobile Device Center 6.1 for Windows Vista (64-bit)
Microsoft ActiveSync 4.5
Redistributable Server Components for Windows Mobile 5.0
Device Security Manager PowerToy for Windows Mobile 5.0
Windows Mobile Network Analyzer PowerToy
Microsoft Smart Devices Remote Tools Framework Powertoy 1.0
Windows Mobile Developer Power Toys