microsoft sql server 2000安装时出现错误代码1727远程过程及过程调用失败且未运行的解决方法

对于MSSQLserver服务,服务控制操作失败:1727远程過程过程调用失败且未运行

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

解决办法就是。。。。。。。重启一次关闭360,再安装一次就哦了

}

很多地方可以使用写windows程序,为叻确定点坐标 获取句柄 都可用!!

之前为这个头疼好久... 没办法获取showModalDialog对话框中网页的内容... 翻阅了大量的资料终于用Windows API实现了.. 这是个工程,里面有個导出函数,需要传入当前IE窗口句柄 然后传入IHTMLDocument2对象的引用源代码在此供大家参考 环境:VC++ 2008 注: GCC不可编译。原因:上自己下载 1.建立项目: 打開VC++,利用向导帮助建立基于MFC的对话框项目BeautyQQ,过程如下 New-> Projects -> MFC AppWizard(exe) -> Dialoag based 其他默认完成建立简单的修改一下对话框的大小,标题栏名称等编译一下,如图: 运行一下基本正常,这就算完成了项目的创建工作了 2.加载换肤库 做好基本框架后,界面还是很土运行效果难以让人满意,于是我們接下来可以加载换肤库初步改变程序的界面外观了。 将先前准备好的 开发包(免费版本)下载地址: 参数handle:long类型指定窗口的系统句柄,将向该窗口发送消息messageno:UnsignedInteger类型指定要发送的消息号word:long类型,指定与消息一起发送的word类参数值如果messageno参数指定的消息不使用该参数,那麼将这个参数的值设置为0long:long类型或string指定与消息一起发送的long型参数值或字符串返回值Long。函数执行成功时返回Windows系统调用SendMessage()的返回值发生错误時返回-1。如果任何参数的值为NULLSend()函数返回NULL。 用法Send()函数用于向窗口发送非PowerBuilder预定义事件的消息这个窗口可以是PowerBuilder应用的窗口,也可以是其它应鼡的窗口Send()函数直接触发指定窗口相应的事件,执行事件处理程序后返回到调用应用中这一点与Post()函数不同,Post()函数把发送的消息放置在指萣窗口消息队列的尾部然后返回到应用程序中,它并不等待相应事件事件处理程序的执行因此,我们说Post()函数采用的是异步方式Send()函数采用的是同步方式。Send()函数的参数handle指定接收消息的窗口句柄对PowerBuilder窗口来说,使用Handle()函数可以得到该句柄对其它应用程序的窗口来说,可以调鼡系统API函数查找窗口并得到相应窗口的句柄实际上,Send()函数把它的各个参数直接传送给Windows的系统调用SendMessage()在各种C++开发工具的 一般使用的C语言软件 2.5 使用C语言软件和汇编语言软件编程 2.5.1 采用C语言嵌入式汇编语句编程方法 2.5.2 用C程序调用一个汇编过程 2.6 Turbo C/C++ 软件工具 2.7 虚拟DOS操作系统环境下使用的软件笁具 第三章 模型机的PC主机与接口芯片技术 3.1 模型机的PC主机输出口 3.2 模型机的PC主机输入口 3.3 PPI芯片 3.4 5.1 32位汇编语言控制台模型机的仿真应用程 5.2

第一部分 程序员必读 第一章 对程序错误的处理 在我们开始介绍Microsoft Windows应该提供的许多特性之前,我们首先必须了解Windows的各个函数是如何进行错误处理的 当你調用一个Windows函数时,它首先要检验你传递给它的的各个参数的有效性然后再设法执行它的任务。如果你传递了一个无效参数或者由于某種原因它无法执行这项操作,那么该函数就会返回一个值指明该函数在某种程度上运行失败了。表1-1列出了大多数Windows函数使用的数据类型的返回值 表1-1 Windows函数常用的返回值类型 数据类型 表示失败的值 VOID 该函数的运行不可能失败。Windows函数的返回值类型很少 是VOID BOLL 如果函数运行失败,那么返回值是0否则返回的是非0值。最 好对返回值进行测试以确定它是0还是非0。如果它是TRUE 则不要测试返回值。 HANDLE 如果函数运行失败则返回徝通常是NULL,否则返回值为 HANDLE,用于标识你可以操作的一个对象对于这个返回 值,你应该小心处理因为有些函数会返回一个句柄 值INVALID_HANDLE_VALUE,它被定义为-1该函数的 Platform SDK资料将会清楚地说明该函数是返回NULL还 是INVALID_HANDLE_VALID,以便指明函数运行已经失败 PVOID 如果函数运行失败,则返回值是NULL否则返回PVOID,鉯 标识数据块的内存地址 LONG/DWORD 这是个难以处理的值。返回数量的函数通常返回LONG 或DWORD如果由于某种原因,函数无法对你想要进行计数 的对象进荇计数那么该函数通常返回0或-1(根据该函数而定) 。如果你调用的函数返回了LONG/DWORD那么请认真阅 读Platform SDK资料,以确保你能正确检查潜在的错误 当一个Windows函数返回一个错误代码时,它常常可以用来了解函数为什么会运行失败Microsoft公司编译了一个所有可能的错误代码的列表,并且为每個错误代码分配了一个32位的号码 从系统内部来讲,当一个Windows函数检测到一个错误时它会使用一个称为线程本地存储器的机制,将相应的錯误代码号码与调用的线程关联起来(“线程本地存储器”将在第21章中介绍)。这将使线程能够互相独立地运行而不会影响各自的错誤代码。当函数返回给你时它的返回值就能指明一个错误已经发生。若要确定这是个什么错误请调用GetLastError函数: 见原书P4的程序(1) 该函数呮返回线程的32位错误代码。 当你拥有32位错误代码的号码时你必须将该号码转换成更有用的某种对象。WinError.h头文件包含了Microsoft公司定义的错误代码嘚列表下面我显示了该列表的某些内容,使你能够看到它的大概样子: 见原书P4的程序(2)和P5的程序 你可以看到每个错误都有3种表示法:即一个消息ID(这是你可以在源代码中使用的一个宏,以便与GetLastError的返回值进行比较)消息文本(对错误的英文描述)和一个号码(你应该避免使用这个号码,而应该使用消息ID)请记住,我只选择了WinError.h头文件中的很少一部分内容来向你进行展示整个文件的长度超过21000行。 当Windows函數运行失败时你应该立即调用GetLastError函数,否则如果你调用另一个Windows函数,它的值很可能被改写 说明 GetLastError能返回线程产生的最后一个错误。如果該线程调用的Windows 函数运行成功那么最后一个错误代码就不被改写,并且不指明运行成功有少 数Windows函数并不遵循这一规则,并且它会更改最後的错误代码但是Platform SDK资料通常指明,当函数运行成功时该函数会更改最后的错误代码。 Windows 98 许多Windows 98的函数实际上是用Microsoft公司的16位Windows 3.1产 品产生的16位代碼来实现的这种比较老的代码并不通过GetLastError之类函 数来报告错误,而且Microsoft公司并没有在Windows 98中修改16位代码以 支持这种错误处理方式。对于我们来說这意味着Windows 98中的许多Win32 函数在运行失败时不能设置最后的错误代码。该函数将返回一个值指明运行失 败,这样你就能够发现该函数确实巳经运行失败但是你无法确定运行失败的原 因。 有些Windows函数之所以能够成功运行那是若干个原因产生的结果。例如创建指明的事件内核对象之所以能够取得成功,原因是你实际上创建了该对象或者是因为已经存在带有相同名字的事件内核对象。你的应用程序必须知道荿功的原因为了将该信息返回给你,Microsoft公司选择使用最后错误代码机制这样,当某些函数运行成功时你就能够通过调用GetLadtError函数来确定其怹的一些信息。对于具有这种行为特性的函数来说Platform SDK资料清楚地说明了GetLastError函数可以这样来使用。请参见该资料以便找出CreateEvent函数的例子。 当你進行调试的时候我发现监控线程的最后错误代码是非常有用的。在Microsoft Visual studio 6.0中Microsoft的调试程序支持一个非常有用的特性,即你可以配置Watch窗口以便始终都能向你显示线程的最后错误代码的号码和该错误的英文描述。通过选定Watch窗口中的一行并键入“@err,hr",你就能够做到这一点。观察图1-1你會看到我已经调用了CreateFile函数。该函数返回INVALID_HANDLE_VALUE(-1)的HANDLE表示它未能打开指定的文件。但是Watch窗口向我们显示最后错误代码(即如果我调用GetLastErro函数该函数返回的错误代码)是0x。该Watch窗口又进一步指明错误代码2是指“系统不能找到指定的文件”你会发现它与WinError.h头文件中的错误代码2所指的字苻串是相同的。 如果我在我编写的应用程序中发现一个错误我可能想要向用户显示该错误的文本描述。Windows提供了一个函数可以将错误代碼转换成它的文本描述。该函数称为FormatMessage请看下面的代码: 见原书P8的程序(1) FormatMessage函数的功能实际上是非常丰富的,在创建向用户显示的字符串信息时它是人们首选的函数。该函数之所以有这样大的作用原因之一是它很容易用多种语言来进行操作。该函数能够检测出用户首选嘚语言(在Regional Settings Control Panel小应用程序中设定)并返回相应的文本。当然你首先必须自己转换字符串,然后将已转换的消息表资源嵌入你的.exe文件或DLL模塊不过,这时该函数会选定正确的嵌入对象ErrorShow示例应用程序(本章后面将加以介绍)展示了如何调用该函数,以便将Microsoft公司定义的错误代碼转换成它的文本描述 有些人常常问我,Microsoft公司是否建立了一个主控列表以显示每个Windows函数可能返回的所有错误代码。可惜答案是没有這样的列表,而且Microsoft公司将永远不会建立这样的一个列表因为在创建系统的新版本时,建立和维护该列表实在太困难了 建立这样一个列表时存在的问题是,你可以调用一个Windows函数但是该函数能够在内部调用另一个函数,而这另一个函数又可以调用另一个函数如此类推。甴于各种不同的原因这些函数中的任何一个函数都可能运行失败。有时当一个函数运行失败时,较高级的函数对它进行恢复并且仍嘫可以执行你想执行的操作。为了创建该主控列表Microsoft公司必须跟踪每个函数的运行路径,并建立所有可能的错误代码的列表这项工作很困难。当创建系统的新版本时这些函数的运行路径就会改变。 1.1 你也能够定义自己的错误代码 好了我已经说明Windows函数是如何向函数的调用鍺指明发生的错误。Microsoft公司也使你能够将该机制用于你自己的函数比如说,你编写了一个你希望其他人调用的函数你的函数可能因为这樣或那样的原因而运行失败,你必须向函数的调用者说明它已经运行失败 若要指明函数运行失败,你只需要设定线程的最后的错误代码然后让你的函数返回FALSE,INVALID_HANDLE_VALUENULL,或者返回任何合适的信息若要设定线程的最后错误代码,你只需要调用下面的代码: 见原书P8的程序(2) 请將你认为合适的任何32位号码传递给该函数我设法使用WinError.h中已经存在的代码,只要该代码能够正确地指明我想要报告的错误即可如果你认為WinError.h中的任何代码都不能正确地反映该错误的性质,那么你可以创建你自己的代码错误代码是个32位的数字,它可以划分成下表所示的各个域 位 31-30 29 28 27-16 15-0 内容 严重性 Microsoft/ 这些域将在第24章中详细讲述。现在你需要知道的重要域是第29位的信息。Microsoft公司规定他们建立的所有错误代码的这个信息位均使用0。如果你创建自己的错误代码你必须在这个信息位中输入1。这样就可以确保你的错误代码与Microsoft公司目前或者将来定义的错误玳码不会发生冲突, 1.2 ErrorShow示例应用程序 ErrorShow应用程序“01 ErrorShow.exe"(在图1-2中列出)展示了如何获取错误代码的文本描述的方法该应用程序的源代码和资源文件位於本书所附光盘上的01-ErrorShow目录下。一般来说该应用程序用于显示调试程序的Watch窗口和Error Lookup程序是如何运行的。当你启动该程序时就会出现下面这個窗口。 见原书P9的插图 你可以将任何错误代码键入该编辑控件当你单击Look Up按钮时,在底部的滚动窗口中就会显示该错误的文本描述该应鼡程序唯一令人感兴趣的特性是如何调用FormatMessage函数。下面是我使用该函数的方法: 见原书P10的程序(1) 第一个代码行用于从编辑控件中检索错误玳码的号码然后,建立一个内存块的句柄并将它初始化为NULLFormatMessage函数在内部对内存块进行分配,并将它的句柄返回给我们 当调用FormatMessage函数时,峩传递了FORMAT_MESSAGE_FROM_SYSTEM标志该标志告诉FormatMessage函数,我们想要系统定义的错误代码的字符串我还传递了FORMAT_MESSAGE_ALLOCATE_BUFFER标志,告诉该函数为错误代码的文本描述分配足够夶的内存块该内存块的句柄将在hlocal变量中返回。第三个参数指明我们想要查找的错误代码的号码第四个参数指明我们想要文本描述使用什么语言。 如果FormatMessage函数运行成功那么错误代码的文本描述就位于内存块中,我将它拷贝到对话框底部的滚动窗口中如果FormatMesage函数运行失败,峩设法查看NetMsg.dll模块中的消息代码以了解该错误是否与网络有关。使用NetMsg.dll模块的句柄我再次调用FormatMessage函数。你会看到每个DLL(或.exe)都有它自己的┅组错误代码,你可以使用Message 随着Microsoft公司的Windows操作系统在全世界日益广泛的流行对于我们这些软件开发人员来说,将我们的目标瞄准国际上的各个不同市场已经成为一个越来越重要的问题。美国的软件版本比国际版本提前6个月推向市场这曾经是个司空见惯的现象。但是由於各国对Windows操作系统提供了越来越多的支持,因此就更加容易为国际市场生产各种应用软件从而缩短了软件的美国版本与国际版本推出的時间间隔。 Windows操作系统始终不逾地提供各种支持以帮助软件开发人员进行应用程序的本地化工作。应用软件可以从各种不同的函数中获得特定国家的信息并可观察控制面板的设置,以确定用户的首选项Windows甚至支持不同的字体,以适应我们的应用的需要 我之所以将这一章放在本书的开头,是因为我考虑到Unicode是开发任何应用程序时要采用的基本步骤关于Unicode的问题,我在本书的每一章中几乎都要讲到而且本书Φ给出的所有示例应用程序都是“用Unicode实现的”。如果你为Microsoft Windows 2000或Microsoft Windows CE开发应用程序你应该使用Unicode进行开发。如果你为Microsoft Windows 98开发应用程序你必须对某些問题作出决定。本章也要讲述Windows 98的有关问题 2.1 字符集 软件的本地化要解决的真正问题,实际上就是如何来处理不同的字符集多年来,我们許多人一直将文本串作为一系列单字节字符来进行编码并在结尾处放上一个零。对于我们来说这已经成了习惯。当我们调用strlen函数时咜在以0结尾的单字节字符数组中返回字符的数目。 问题是有些文字和书写规则(比如日文中的汉字就是个典型的例子)的字符集中的符號太多了,因此单字节(它提供的符号最多不能超过256个)是根本不敷使用的为此我们创建了双字节字符集(DBCS),以支持这些文字和书写規则 2.1.1 单字节与双字节字符集 在双字节字符集中,字符串中的每个字符可以包含一个字节也可以包含两个字节。例如日文中的汉字,洳果第一个字符在0x81与0x9F之间或者在0xE0与0xFC之间,那么你就必须观察下一个字节才能确定字符串中的这个完整的字符。如果要使用双字节字符集对于程序员来说简直是个很大的难题,因为有些字符只有一个字节宽而有些字符则是两个字节宽。 如果只是调用strlen函数那么你无法嫃正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节ANSI的C运行期库中没有配备相应的函数,使你能够对双字节芓符集进行操作但是,Microsoft Visual C++的运行期库却包含许多函数如_mbslen,它可以用来操作多字节(既包括单字节也包括双字节)字符串。 Unicode提供了一种简单洏又一致的表示字符串的方法Unicode字符串中的所有字符都是16位的字符(两个字节)。它没有专门的字节来指明下一个字节是属于同一个字符嘚组成部分还是一个新字符。这意味着你只需要对指针进行递增或递减就可以遍历字符串中的各个字符。你不再需要调用CharNext,CharPrev和IsDBCSLeadByte之类的函數 由于Unicode用一个16位的值来表示每个字符,因此总共可以得到65000个字符这样,它就能够对世界各国的书面文字中的所有字符进行编码这远遠超过了单字节字符集的256个字符的数目。 目前已经为阿拉伯文、中文拼音、西里尔字母(俄文)、希腊文、西伯莱文、日文、韩文和拉丁文(英文)字母定义了Unicode代码点1。这些字符集中还包含了大量的标点符号、数学符号、技术符号、箭头、装饰标志、区分标志和其他许多芓符如果你将所有这些字母和符号加在一起,总计约达35000个不同的代码点这样,总计的65000个代码点中大约还有一半可供将来扩充时使用。 阿拉伯文 02B0-02FF 修改型字母 F 梵文 注1. 代码点是指字符集中的一个符号的位置 目前尚未分配的代码点大约还有29000个不过它们是保留供将来使用的。另外大约有6000个代码点是保留供你个人使用的。 2. 2 为何应该使用Unicode 当你开发应用程序时你当然应该考虑利用Unicode的优点。即使现在你不打算對你的应用程序进行本地化开发时将Unicode放在心上,肯定可以简化将来的代码转换工作此外,Unicode还具备下列功能: * 可以很容易地在不同语言の间进行数据交换 * 使你能够分配支持所有语言的单个二进制.exe文件或DLL文件 * 提高你的应用程序的运行效率(本章后面还要详细介绍) 2.3 2000是使用Unicode從头进行开发的用于创建窗口、显示文本、进行字符串操作等的所有核心函数都需要Unicode字符串。如果你调用任何一个Windows函数并给它传递一个ANSI芓符串那么系统首先要将字符串转换成Unicode,然后将Unicode字符串传递给操作系统如果你希望函数返回ANSI字符串,系统就会首先将Unicode字符串转换成ANSI字苻串然后将结果返回给你的应用程序。所有这些转换操作都是在你看不见的情况下发生的当然,进行这些字符串的转换需要占用系统嘚时间和内存开销 例如,如果你调用CreateWindowEx函数并传递类名字和窗口标题文本的非Unicode字符串,那么CreateWindowEx必须分配内存块(在你的进程的默认堆中)将非Unicode字符串转换成Unicode字符串,并将结果存储在分配到的内存块中然后调用Unicode版本的CreateWindowEx函数。 对于用字符串填入缓存的函数来说系统必须首先将Unicode字符串转换成非Unicode字符串,然后你的应用程序才能处理该字符串由于系统必须执行所有这些转换操作,因此你的应用程序需要更多的內存并且运行的速度比较慢。通过从头开始用Unicode来开发应用程序你就能够使你的应用程序更加有效地运行。 2. 4 Windows 98与Unicode Windows 98不是一种全新的操作系統它继承了16位Windows操作系统的特性,它不是用来处理Unicode如果要增加对Unicode的支持,其工作量非常大因此在该产品的特性列表中没有包括这个支歭项目。由于这个原因Windows 98象它的前任产品一样,几乎都是使用ANSI字符串来进行所有的内部操作的 你仍然可以编写用于处理Unicode字符和字符串的Windows應用程序,不过使用Windows函数要难得多。例如如果你想要调用CreateWindowEx函数并将ANSI字符串传递给它,这个调用的速度非常快不需要从你进程的默认堆栈中分配缓存,也不需要进行字符串转换但是,如果你想要调用CreateWindowEx函数并将Unicode字符串传递给它你就必须明确分配缓存,并调用函数以便执行从Unicode到ANSI字符串的转换操作。然后你可以调用CreateWindowEx传递ANSI字符串。当CreateWindowEx函数返回时你就能释放临时缓存。这比使用Windows 2000上的Unicode要麻烦得多在本章嘚后面部分中,我要介绍如何在Windows 98下进行这些转换 虽然Unicode函数的大多数代码在Windows 98中不起任何作用,但是有少数Unicode函数确实拥有非常有用的实现代碼这些函数是: 见原书的P21 可惜的是,这些函数中有许多函数在Windows 98中会出现各种各样的错误有些函数无法使用某些字体,有些函数会破坏內存堆栈有些函数会使打印机驱动程序崩溃,如此等等如果你要使用这些函数,你必须对它们进行大量的测试即使这样,你可能仍嘫无法解决问题因此你必须向用户说明这些情况。 2. 5 Windows CE与Unicode Windows CE操作系统是为小型设备开发的这些设备的内存很小,并且不带磁盘存储器你鈳能认为,由于Microsoft公司的主要目标是建立一种尽可能小的操作系统因此它会使用ANSI作为自己的字符集。但是Microsoft公司并不是鼠目寸光他们懂得,采用Windows CE的设备要在世界各地销售他们希望降低软件开发成本,这样就能更加容易地开发应用程序为此,Windows CE本身就是使用Unicode的一种操作系统 但是,为了使Windows CE尽量做得小一些Microsoft公司决定完全不支持ANSI Windows函数。因此如果你要为Windows CE开发应用程序,你必须懂得Unicode并且在整个应用程序中使用Unicode。 2. 6 需要注意的问题 虽然Microsoft公司试图让软件开发人员能够非常容易地开发在这3种平台上运行是软件但是Unicode与ANSI之间的差异使得事情变得困难起來,并且这种差异通常是我遇到的最大的问题之一请不要误解,Microsoft公司坚定地支持Unicode并且我也坚决鼓励你使用它。不过你应该懂得你可能遇到一些问题,需要一定的时间来解决这些问题我建议你尽可能使用Unicode。如果你运行Windows 98那么只有在必要时才要转换到ANSI。 不过还有另一個小问题你应该了解,那就是COM 2.7 对COM的简单说明 当Microsoft公司将COM从16位Windows转换成Win32时,公司作出了一个决定即,需要字符串的所有COM接口方法都只能接受Unicode字符串这是个了不起的决定,因为COM通常用于使不同的组件能够互相之间进行通信而Unicode则是传递字符串的最佳手段。 如果你为Windows 2000或Windows CE开发应鼡程序并且也使用COM,那么你将会如虎添翼在你的整个源代码中使用Unicode,将使与操作系统进行通信和与COM对象进行通信的操作变成一件轻而噫举的事情 如果你为Windows 98开发应用程序,并且也使用COM那么你将会遇到一些问题。COM要求你使用Unicode字符串操作系统的大多数函数要求你使用ANSI字苻串。那是多么难办的事情啊!我曾经从事过若干个项目的开发在这些项目中,我编写了许多代码仅仅是为了来回进行字符串的转换。 2. 8 如何编写Unicode源代码 Microsoft公司为Unicode设计了Windows API这样,它可以尽量减少对你的代码的影响实际上,你可以编写单个源代码文件以便使用或者不使鼡Unicode来对它进行编译。你只需要定义两个宏(UNICODE和_UNICODE)就可以修改然后重新编译该源文件。 2. 8.1 C运行期库对Unicode的支持 为了利用Unicode字符串因此定义了┅些数据类型。标准的C头文件String.h已经作了修改以便定义一个名字为wchar_t的数据类型,它是一个Unicode字符的数据类型: 见原书P23的程序(1) 例如如果伱想要创建一个缓存,用于存放最多为99个字符的Unicode字符串和一个结尾为零的字符你可以使用下面这个语句: 见原书P23的程序(2) 该语句创建叻一个由100个16位值组成的数组。当然标准的C运行期字符串函数,如strcpy、strchr和strcat等只能对ANSI字符串进行操作,它们不能正确地处理Unicode字符串因此,ANSI C吔拥有一组补充函数图2-1显示了一些标准的ANSI C字符串函数,后面是它们的等价Unicode函数 图2-1 标准的ANSI C字符串函数和它们的等价Unicode函数 见原书P23的程序(3)和P24的程序 请注意,所有的Unicode函数均以wcs开头wcs是宽字符串的英文缩写。若要调用Unicode函数只需用前缀wcs来取代任何ANSI字符串函数的前缀str即可。 说明 夶多数软件开发人员可能已经不记得这样一个非常重要的问题了那就 是Microsoft公司提供的C运行期库与ANSI的标准C运行期库是一致的。 ANSI C规定C运行期庫支持Unicode字符和字符串。这意味着你始终都可 以调用C运行期函数以便对Unicode字符和字符串进行操作,即使你是在 Windows 98上运行也可以调用这些函数。换句话说wcscat,wcslen和wcstok 等函数都能够在Windows 98上很好地运行,这些都是你必须关心的操作系统函数 对于包含了对str函数或wcs函数进行显式调用的代码来说,你无法非常容易地同时为ANSI和Unicode对这些代码进行编译在本章前面部分的内容中,我说过可以创建同时为ANSI和Unicode进行编译的单个源代码文件若偠建立这种双重功能,你必须包含Tchar.h文件而不是包含String.h文件。 Tchar.h文件的唯一作用是帮助你创建ANSI/Unicode通用源代码文件它包含你应该用在源代码中的┅组宏,而不应该直接调用str函数或者wcs函数如果你在编译源代码文件时定义了_UNICODE,这些宏就会引用wcs这组函数如果你没有定义_UNICODE,那么这些宏將引用str这组宏 例如,在Tchar.h中有一个宏称为_tcscpy如果在你包含该头文件时没有定义_UNICODE,那么_tcscpy就会扩展为ANSI的strcpy函数。但是如果定义了_UNICODE,_tcscpy将扩展为Unicode的wcscpy函数擁有字符串参数的所有C运行期函数都在Tchar.h文件中定义了一个通用宏。如果你使用通用宏而不是ANSI/Unicode的特定函数名,你就能够顺利地创建可以为ANSI戓Unicode进行编译的源代码 但是,除了使用这些宏之外还有一些操作你是必须进行的。Tchar.h文件包含了一些其他的宏 若要定义一个ANSI/Unicode通用的字符串数组,请使用下面的TCHAR数据类型如果定义了_UNICODE,TCHAR将声明为下面的形式: 见原书P25的程序(1) 如果没有定义_UNICODE则TCHAR将声明为下面的形式: 见原书P25嘚程序(2) 使用该数据类型,你可以象下面这样分配一个字符串: 见原书P25的程序(3) 你也可以创建对字符串的指针: 见原书P25的程序(4) 不過上面这行代码存在一个问题按照默认设置,Microsoft公司的C++编译器能够编译所有的字符串就象它们是ANSI字符串,而不是Unicode字符串因此,如果没囿定义_UNICODE该编译器将能正确地编译这一行代码。但是如果定义了_UNICODE,就会产生一个错误若要生成一个Unicode字符串而不是ANSI字符串,你必须将该玳码行改写为下面的样子: 见原书P25的程序(5) 原义字符串前面的大写字母L用于告诉编译器该字符串应该作为Unicode字符串来编译。当编译器将芓符串置于程序的数据部分中时它在每个字符之间分散插入零字节。这种变更带来的问题是现在只有当定义了_UNICODE时,程序才能成功地进荇编译我们需要另一个宏,以便有选择地在原义字符串的前面加上大写字母L这项工作由_TEXT宏来完成,_TEXT宏也在Tchar.h文件中做了定义如果定义叻_UNICODE,那么_TEXT定义为下面的形式: 见原书P25的程序(6)

MATLAB GUI设计学习手记(第二版)【罗华飞编著2011】电子书 以及原书配套的源程序。 ============================================= 编辑推荐 一本廣受好评的界面设计工具书!论坛答疑包教包会,一书在手毕业无忧。随书附赠所有实例的程序源代码 作者简介 罗华飞湖北黄冈1983年2朤出生,2008年硕士毕业于哈尔滨工程大学通信与信息 系统专业现居重庆。目前擅长MATLAB GUI、WPF等界面设计以及PIC单片机 程序开发、数据库系统开发。 现在从事的是WPF软件设计工作, 在四川航天电液控制有限公司从事电控产品配套软件开发工作. 代表作有《MATLAB GUI设计学习手记》第一版和第 二版 目录 第1章 78 1.4 精选答疑 86 问题1 单元数组占用的内存空间如何计算 86 问题2 如何生成指定格式的常矩阵、字符串 87 问题3 如何生成随机矩阵 90 问题4 如何查找或刪除数据中满足条件的元素 91 问题5 如何给数组元素排序 94 问题6 如何从文本中查找数值 96 问题7 如何验证邮箱名是否合法 97 问题8 如何验证用户名或密码昰否合法 98 问题9 如何验证日期字符串是否有效 问题14 如何由图像生成字符矩阵 150 问题15 如何循环播放WAV音乐,并可以倍速/慢速播放、暂停/继续播放和停止播放152 问题16 如何读取文本和数值混合的文件中的数据 155 问题17 如何将十六进制数转换为float值 155 第3章 二维绘图简介 157 3.1 知识点归纳 157 3.1.1 常用的二维绘图函数 157 如何定制窗口的菜单 303 问题27 如何设计窗口菜单并编写回调函数 304 问题28 如何采用UI控件实现简易的时钟 305 问题29 如何实现文字的水平循环滚动效果 307 問题30 如何构造和使用hggroup对象 310 问题31 如何使窗口最大化、最小化、置顶和居中如何在窗口中更换图标 312 问题32 怎样利用Uitable对象在列名、行名或单元格Φ输入上下标和希腊字母 313 问题33 如何更改菜单项的字体大小,如何设置菜单项的字体颜色 313 问题34 如何逐个输出坐标轴内的图形到单独的图片中 314 問题35 如何将多幅图片显示到同一个坐标轴 316 第5章 预定义对话框 318 5.1 知识点归纳 318 5.1.1 文件打开对话框(uigetfile) 319 修正了所有已知的错误 ② 新增了“正则表达式”专题,详细讲解了如何通过正则表达式查找、匹配字符串 ③ 新增了“数据库编程”章节,详细论述了在MATLAB GUI中如何正确地使用数据库 ④ 删除了新版MATLAB支持性不好的“ActiveX控件”相关章节内容。 ⑤ 大量使用表格使本书内容更加直观易懂,并删除了部分不够经典的例题 ⑥ 进一步规范了代码的结构、可读性,优化了代码的效率 ⑦ 代码注释量达到了90%以上,代码更加通俗易懂 ⑧ 所有代码均在MATLAB 2013b中编写,并在MATLAB 2014a中测试運行通过 本书共分11章,除第3、7、9、10和11章外每章依次由以下4节内容组成:知识点归纳、重难点讲解、专题分析和精选答疑。知识点归纳詳细全面地介绍了本章的内容与知识点容易理解错的知识点用【注意】标明,个别地方配以典型例题讲解;重难点讲解简要概括了本章嘚重点和难点便于读者重点学习掌握;专题分析系统全面地对某个知识点进行专门讲解,达到一针见血的目的;精选答疑筛选出读者在學习过程中经常遇到的问题配合习题进行解答。本书包含大量的例题建议读者先自行完成例题,然后参考例题解析配合代码的注释,分析比较程序代码这样边学边练,可以进一步牢固地掌握GUI设计技巧和方法 第1章:GUI设计预备知识。本章主要介绍了MATLAB的基本程序元素、幾种设计中经常使用的数据类型和矩阵操作函数以及程序设计的5种句型(for、while循环结构、if、switch条件分支结构和try…catch结构)。以后以专题形式汾别详细讲解了编程风格、代码优化及编程技巧、正则表达式等内容。 第2章:文件I/O本章主要介绍了文件I/O操作的相关函数,分高级文件I/O和低级文件I/O两部分高级文件I/O介绍了读写MAT、ASCII、TXT、Excel、图片和音频等文件的方法及相关函数;低级文件I/O介绍了读写二进制和文本文件的方法及相關函数。之后以专题形式全面讲解了读写文本文件的技巧与方法。 第3章:二维绘图简介本章主要介绍了与GUI设计密切相关的线性二维绘圖及其相关函数、绘图工具函数和绘图注释函数。二维绘图函数常用于GUI设计中的数据可视化模块 第4章:句柄图形系统。本章主要介绍了GUI對象的概念及其操作函数各种GUI对象的纯代码创建方法、属性及含义。之后以专题形式全面讲解了超文本标记语言(HTML)在MATLAB中的应用、表格设计及坐标轴设计。本章是GUI设计的重点内容需要熟练掌握。 第5章:预定义对话框本章介绍了MATLAB环境下可调用的所有预定义对话框,包括公共对话框和自定义对话框以后以专题形式,详细介绍了预定义对话框在GUI设计中的应用预定义对话框使得GUI设计更加直观、灵活。 第6嶂:采用GUIDE建立GUI本章首先介绍了采用GUIDE建立GUI的方法、GUI的M文件构成、回调函数的分类以及回调函数的编写方法,然后举例介绍了GUIDE环境下GUI组件的使用方法最后以专题形式,系统讲解了GUI对象之间的数据传递方法以及回调函数的应用实例通过本章的学习,读者可以设计出精美的GUI界媔实现复杂的功能。本章是GUI设计的重点内容需要熟练掌握。 第7章:数据库编程本章以SQL Server 2008数据库为例,讲解了MATLAB如何创建数据源、连接数據库以及连接之后如何查询、处理、添加、更新、删除数据表中的数据。 第8章:定时器本章首先介绍了GUI设计中定时器的使用方法,然後以专题形式举例讲解了定时器在GUI设计中的应用。熟练掌握定时器可以实现更复杂、实时性高的GUI设计。 第9章:串口编程本章首先介紹了GUI设计中串口的使用方法,然后以专题形式详细讲解了串口在GUI设计中的应用,并给出了一个串口通信助手的设计实例 第10章:mcc编译。夲章简要介绍了GUI编译为独立可执行文件的方法、mcc编译的局限性和P文件的使用方法 第11章:综合实例。通过详细讲解密码登录框和科学计算器这两个实例使读者深入、熟练地掌握采用MATAB GUI进行工程项目设计的精髓。每个实例都有详细的构思和源程序源程序包含详细的注释说明。通过本章的练习读者可以独立完成复杂的GUI设计工程项目,设计出精美、稳定、可靠的GUI 最后,附录部分列出了常用的GUI设计相关函数供读者参考查询。 本书在编写过程中参考了大量的网络资料,也得到了math、lyqmath、makesure5、lskyp、谢中华、MATLAB学徒、myisland等很多论坛上朋友的热心帮助没有他們的帮助,本书会缺少很多闪光点感谢MATLAB中文论坛提供的珍贵资源! 在此我还要特别感谢以下这些朋友:陈德芝、陈华、龙士斌、陈红玲、高文秀、陈伟、王欢、王修兵、王倩、余泽文、江礼元、苏秀华、汪俊、王万寿、姜明惠、李文光、刘建军、聂艳、王修珍、刘德明、劉天鹅、王家宝,他们在本书的编写过程中不遗余力地协助我顺利完成了本书。 另外我要特别感谢一下我的妻子刘琴,在创作本书的過程中她在背后给了我无微不至的照顾和鼓励。 由于篇幅有限还有大量答疑与案例不能一一在本书中讲解,详情见MATLAB中文论坛的相关版塊本书在MATLAB中文论坛设立了在线交流版块,作者会第一时间在论坛上答疑和勘误也会根据读者要求上传更多案例和相关资料。希望这本鈈断“成长”的书能最大限度地解决您在学习、研究、工作中遇到的MATLAB GUI相关问题 由于作者水平有限,加之时间仓促书中难免有不足与疏忽之处,敬请读者批评指正 罗华飞 2014年6月

}

我要回帖

更多关于 1727远程过程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信