![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
WIN32编程
genovia
这个作者很懒,什么都没留下…
展开
-
关于内存映射文件处理
<br />关于内存映射文件处理<br />今天看到一篇文章讲内存映射文件的处理,虽然自己没有处理过如此大的文件系统,但是好奇就也看了下,谁知道自己以后会不会用到或考到这方面的知识。所以就给自己mark一下,增加点自己的印象。<br />首先,通过CreateFile()函数来创建或打开一个文件内核对象,这个对象标识了磁盘上将要用作内存映射文件的文件。(其实是获取文件句柄)<br />其次,通过CreateFileMapping()函数来为刚才创建的文件内核对象创建一个文件映射内核对象并告诉系统文件的尺寸以转载 2010-12-01 19:47:00 · 540 阅读 · 0 评论 -
线程本地存储
<br />线程本地存储(TLS)运行一个进程拥有自己的变量缓冲,保证对进程中的每个线程都是唯一的。这个变量缓冲很小,因为进程中每个线程在创建时都必然会创建一个TLS数组元素,但是如果灵活的使用,这个缓冲是足够的。具体讲,系统常数TLS_MINIMUM_AVAILABLE,定义了每个进程可以使用的TLS数组中槽的数目。在WinCE下,这个值为64,。所以每个进程拥有64个4字节变量,可以用来存储该进程中每个线程需要的唯一数据。为了得到更好的效果,当然,你必须自己管理这64个槽。<br /> <br />预留原创 2010-07-22 16:45:00 · 949 阅读 · 0 评论 -
Wince unicode 处理
<br />Wince unicode<br />Windows CE是一种Unicode环境。他支持ASCII函数以实现文本的转换,但其原有的文本格式是Unicode。<br />将ASCII应用程序转换为Unicode程序的一些通用指导方针如下:<br />①包含Tchar.h文件。该文件包含所有必要的转换。<br />②使用Win32字符串函数(例如lstrlen)而不是C运行时态(run-time)库的函数。<br />③声明中使用TCHAR、LPTSTR和其他类型。这样代码将易于编译为ASCII或转载 2010-07-21 17:25:00 · 1425 阅读 · 0 评论 -
如何正确的使用互锁函数【Windows编程】
如何正确的使用互锁函数【Windows编程】2009-12-16 20:15由于Windows是抢占式操作系统,所以默认的运行是希望各种程序<br />抢占CPU资源,所以若对此机制不加限制,就会出现。<br /><br />当一个进程或线程在修改某块内存的同时,另一进程或线程也在同时修改。<br />这样就会出现,我们期望修改成某值,而被其他进程/线程偷偷的篡改了。<br />造成了结果不符合我们的预见。<br /><br />那么如何保证我们预见的正确性呢,或者说如何保证我们再修改某块内存的<br />转载 2010-07-23 10:10:00 · 806 阅读 · 0 评论 -
纤程
<br />纤程的构造类似线程,在应用程序内被调度,而不是被调度器调度。纤程和线程类似,有自己的栈和上下文。不同的是应用程序自己管理纤程,手动的在纤程之间切换,这样每个纤程都在应用程序的安排获得合适的执行时间。<br /> <br />一个应用程序在创建纤程时,首先创建一个线程。这个线程调用一个函数将自己转换成一个纤程后。这个线程,在成为纤程后,可以从自身创建多个纤程。<br />操作系统将所有的纤程作为一个线程来调度--该线程就是原来转换成第一个纤程的线程。所以系统对应用程序中原来那个线程分配调度时间,应原创 2010-07-22 15:29:00 · 1000 阅读 · 0 评论 -
WINAPI
<br />WINAPI见windef.h这个头文件<br />#define WINAPI __stdcall<br /> 默认情况下,我们的函数调用都是遵循__stdcall这个规则的。当然,也有诸如__cdecl、__pascal等规则。<br /> 使用__stdcall还是__cdecl或__pascal,在纯Windows编程下并非特别需要。<br />__stdcall:<br /> 1、进行函数调用,函数参数的入栈方式是最右边先入栈。<br /> 2、同时__stdcall规定,调用转载 2010-07-22 11:00:00 · 451 阅读 · 0 评论 -
线程
一个线程分配的内存对该进程内的所有其他线程都是可以访问的。进程内的所有线程对句柄都拥有同样的访问权限,包括文件句柄、内存对象句柄,或者同步对象的句柄。进程的主线程的栈大小是通过链接器设置的(vs中设置栈大小的链接器开关为/stack)。后续创建的线程将默认和主线程拥有相同的栈大小,这个默认栈大小可以在创建线程时被替换掉。因为WinCE进程没有优先级类别,所有进程都被平等对待。每个线程可以有不同的优先级,但是拥有这些线程的进程无法影响这些线程的优先级。从WinCE3.0后,优先级增加到256个,但多数应用程序原创 2010-07-22 10:59:00 · 562 阅读 · 0 评论 -
Unicode
<br /> <br />Windows CE是一种Unicode环境。他支持ASCII函数以实现文本的转换,但其原有的文本格式是Unicode。<br />将ASCII应用程序转换为Unicode程序的一些通用指导方针如下:<br /><br />①包含Tchar.h文件。该文件包含所有必要的转换。<br />②使用Win32字符串函数(例如lstrlen)而不是C运行时态(run-time)库的函数。<br />③声明中使用TCHAR、LPTSTR和其他类型。这样代码将易于编译为ASCII或Unicod转载 2010-07-21 16:19:00 · 687 阅读 · 0 评论 -
进程
1.创建进程BOOL CreateProcess();原创 2010-07-21 15:56:00 · 442 阅读 · 0 评论 -
模块
<br />包含可执行代码的win32文件被称为模块。WinCE支持两种类型的模块:可执行程序,exe;动态链接库 dll;一个进程就是一个可执行程序的单个实例。每个进程至少拥有一个线程,线程在进程内执行代码。<br /> dll有两种加载方式:隐式加载和显式加载。隐式加载通过exe和dll加载;显式加载通过应用程序对如下两个函数的调用来加载:LoadLibrary和LoadLibraryEX。<br /> <br />当dll加载完成后,通过调用GetProcAddress()函数得到该dll导出函数的原创 2010-07-21 15:34:00 · 403 阅读 · 0 评论 -
异常处理
下面的代码举例说明了一种方法,指出所发生异常的类别: BOOL Func_SEHExceptionGetCodeBase() { int x,y; __try{ x = 0; y = 4/x; } __except((GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO) ? / EXCEPTION_EXECUTE_HA原创 2010-07-23 08:44:00 · 783 阅读 · 0 评论 -
Windows CE下的字符串
Windows CE下的Win32编程2007-07-21 09:58<br />通常,有以下三种方式定义字符和字符串:<br />ANSI字符和字符串;<br />Unicode字符和字符串;<br />双模式字符和字符串.<br />1.ANSI字符和字符串<br />为了定义一个ANSI字符变量,字符数组或字符指针,在C/C++程序中通常使用char或char*数据类型来定义.同时,Win32 API还定义了CHAR和LPSTR数据类型来增强代码的可移植性.<br />在对ANSI字符串进行操作时,C转载 2010-07-21 10:53:00 · 1901 阅读 · 0 评论 -
Wince unicode
<br /> <br />Windows CE是一种Unicode环境。他支持ASCII函数以实现文本的转换,但其原有的文本格式是Unicode。<br />将ASCII应用程序转换为Unicode程序的一些通用指导方针如下:<br /><br />①包含Tchar.h文件。该文件包含所有必要的转换。<br />②使用Win32字符串函数(例如lstrlen)而不是C运行时态(run-time)库的函数。<br />③声明中使用TCHAR、LPTSTR和其他类型。这样代码将易于编译为ASCII或Unicod转载 2010-07-21 16:14:00 · 790 阅读 · 0 评论 -
文件映射
<br />内存映射文件之剖析<br /> 作者:xrbeck<br /> <br />内存映射文件(Mapping File)是Windows内存管理中的重要一环,也是编程<br />技术中比较高级的一个话题。目前关于这方面的资料比较少,而其实内存映射<br />文件其实对我们的对于Windows的内存了解很重要,在这里把笔者的心得写<br />出来,和转载 2010-12-01 18:59:00 · 2106 阅读 · 0 评论 -
win32 数据类型 msdn版
http://msdn.microsoft.com/en-us/library/aa383751(v=VS.85).aspx Windows Data Types The data types supported by Windows are used to define function return values, function and message parameters, and s原创 2010-11-27 21:19:00 · 957 阅读 · 0 评论 -
wince 文件系统API
1.创建、打开文件 CreateFile() 除了可以打开文件和设备以外,CreateFile还可以打开诸如硬盘,flash卡之类的存储卷。要打开一个卷,必须传递它的名字,并在后面附上/Vol: 。举例来说:要打开一个由目录名Storage Card 代表的CF卡,可以按一下方式: h= CreateFile(TEXT(“//Storage Card//vol:”),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NOMAL,原创 2010-07-25 10:27:00 · 1161 阅读 · 0 评论 -
进程间通信
1. 命名内存映射对象 使用命名内存映射对象,两个进程能够分配一块共享内存,同时两个进程都是可以平等访问的。你必须使用命名内存映射对象,这样两个进程才能够访问到同一块数据。系统能够为该对象的使用维持合适的计数,知道所偶打开它进程都关闭,才释放对象。 这个级别的交互是有代价的。在他们读写共享内存块的数据时,你需要进程间同步。 CreateFileMapping()创建内存映射对象 MapViewofFile()为该对象创建一个试图。 当映射对象使用完毕,通过下面函数关闭试图: UnmapViewo原创 2010-07-23 15:57:00 · 571 阅读 · 0 评论 -
线程同步
6.3.1 事件对象 事件对象(Events)是同步对象之一,一个事件对象就类似一种特定的短消息,它被用来通知某个线程发生了一个特定的事件。有的时候也会告诉这个线程应该做什么事情了。比如,当系统的即插即用管理器发现了一个新插入的设备的时候,它就会设定一个特定的事件,这样系统就会触发和该事件相关的线程,并告诉它系统已经添加了一个新的设备。 事件对象有信号(signaled)和无信号(nonsignaled)两种状态。事件对象在创建的时候可以选择自动的从signaled状态恢复到nonsi原创 2010-07-22 20:30:00 · 962 阅读 · 0 评论 -
windows api中定义的基本数据类型简介
windows api中定义的基本数据类型简介(转)<br />已有 7218 次阅读2008-5-16 13:14|个人分类:WIN32 APIwindows api中定义的基本数据类型简介 <br />ATOM 原子(原子表中的一个字符串的参考)<br />BOOL 布尔变量<br />BOOLEAN 布尔变量<br />BYTE 字节(8位)<br />CCHAR转载 2010-07-21 16:24:00 · 482 阅读 · 0 评论 -
typedef struct 用法详解
<br />1. 基本解释<br /> typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。<br /> 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。<br /> 至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。<br /><br /> <br /><br /> 2. typedef & 结构的问题<转载 2010-07-21 09:51:00 · 872 阅读 · 0 评论 -
typedef的四个用途和两个陷阱
<br />用途一: <br />定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: <br />char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, <br />// 和一个字符变量; <br />以下则可行: <br />typedef char* PCHAR; // 一般用大写 <br />PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针 <br />虽然: <br />char *pa转载 2010-07-21 09:36:00 · 368 阅读 · 0 评论 -
Windows Data Types
<br />The data types supported by Windows are used to define function return values, function and message parameters, and structure members. They define the size and meaning of these elements. For more information about the underlying C/C++ data types, see转载 2010-07-21 16:27:00 · 489 阅读 · 0 评论 -
内存管理
1.关于虚拟内存:主要优点:应用程序与设备物理地址的实现无关。分页式内存:每页大小4kb。虚拟页面有3种状态:空闲(free)、保留(reserved)、提交(committed)。2.系统内存查询:GetSysemInfo、GlobalMemoryStatus、GetStoreInformation。原创 2010-07-21 09:35:00 · 563 阅读 · 0 评论 -
字符串学习
<br />A<br />如果程序定义了_UNICODE宏直接用<br />WCHAR *str=L"unicodestring";<br />TextOut(0,0,str);<br />否则就需要转换类型<br />#include <comdef.h><br />WCHAR *str=L"unicodestring";<br />bstr_t str1=str;<br />TextOut(0,0,(char*)str1); <br />Q 如何实现ANSI和UNICODE的相互转换<br />A<br转载 2010-07-20 20:05:00 · 463 阅读 · 0 评论 -
windows编程中字符和字符串的处理
<br />字符格式基础<br />首先说说字符编码的两种格式。<br />一种是将文本字符串编码成一组以0结尾的单字节字符,即ansi字符,每个字符占8位,即一个字节。这种编码方式的缺陷是,对于字符本地化的问题不能很好的解决,因为8位空间最多容纳256个字符,不能完全唯一的表示世界上所有的字符。<br />另一种是Unicode字符,每个字符都使用UTF-16编码(一般来说,除非特别声明不使用UTF-16编码),即一个字符占16位空间(2字节)。基于这种情况,世界上大多数语言的字符都可以用一个唯一的2字节转载 2010-07-20 19:52:00 · 1053 阅读 · 0 评论 -
USB应用程序编程
<br />应用程序是系统与用户的接口,它通过通用驱动程序完成对外设的控制和通信。主机用户程序的编写使用EVC++编译环境下的API函数实现。程序中主要用到两个APl函数:CreateFile()和DeviceIoControl()。首先查找设备,打开设备的句柄:调用Win32函数CreatFile()得到设备驱动程序的句柄。然后进行读写和控制操作:调用wi n 3 2 函数DeviceIoControl(),通过得到的句柄把IoControlCode和相关的输入输出缓冲区提交给驱动程序。最后关闭设备句柄:原创 2010-07-18 15:09:00 · 1039 阅读 · 0 评论 -
Windows编程之初步之窗口类别与注册
<br />窗口类别定义了窗口消息处理程序和依据此类别建立的窗口的其它特征。在建立窗口时,要定义一些该窗口所独有的特征.<br /> <br />在为程序建立窗口之前,必须首先呼叫RegisterClass注册一个窗口类别。该函数只需要一个参数,即一个指向型态为WNDCLASS的结构指针。<br /> <br /> <br /> <br />在WinMain中为WNDCLASS定义一个结构,通常像这样:WNDCLASS wndclass ;<br />然后,你就可以初始化该结构的10个字段,并呼叫Reg原创 2010-07-17 16:52:00 · 587 阅读 · 0 评论 -
API入门系列之二 -Unicode还是ASCII
<br />API入门系列之二 -Unicode还是ASCII<br /> <br />今天,开始第二篇文章,这章我准备介绍一下Windows平台下编程中Unicode编码和ASCII编码的相关问题。<br /> 不知道各位新手朋友们遇到这样的问题没有呢,新建一个Windows应用程序,调用MessageBox这个函数,准备让它弹出一段提示文本,可是编译器在编译的时候却报错说,不能将 const char* 或者 const char[] 转换为 const wchar_t* 之类的提示呢,很多刚接触Wi转载 2010-07-17 14:17:00 · 398 阅读 · 0 评论 -
基于decodeUINT结构体的hello程序
<br />//======================================================================<br />// Header file:helloce.h<br />//======================================================================<br />// 返回元素的数量,主要用于搜索消息列表<br />#define dim(x) (sizeof(x) / sizeof(x[转载 2010-07-19 18:49:00 · 648 阅读 · 0 评论 -
WinCE 应用程序开机自动运行的又一种方法
近日在开发过程中遇到WinCE应用程序开机自动运行的问题,在网上找了找,发现大概有以下三种方法:1、 将应用程序和应用程序快捷方式添加到映像里,再将快捷方式添加到StartUp目录下,这样当系统运行后应用程序就能自动运行;2、 直接替换Wince的SHELL,即修改注册表:[HKEY_LOCAL_MACHINE/init]"Launch50"="explorer.exe""Depend50"=hex:14,00, 1e,00把这个explorer.exe改成你的应用程序(比如:MyApp.exe);3、 把原创 2010-07-19 16:15:00 · 357 阅读 · 0 评论 -
线程同步
临界区域有四个函数用于临界区域。要使用这些函数,您必须定义一个临界区域对象,这是一个型态为CRITICAL_SECTION的整体变量。例如:CRITICAL_SECTION cs ; 这个CRITICAL_SECTION数据型态是一个结构,但是其中的字段只能由Windows内部使用。这个临界区域对象必须先被程序中的某个线程初始化,通过呼叫:InitializeCriticalSection (&cs) ; 这样就建立了一个名为cs的临界区域对象。该函数的在线辅助说明包含下原创 2010-07-18 10:41:00 · 442 阅读 · 0 评论 -
定时器
因为Windows应用程序从正常的消息队列中取得WM_TIMER消息,所以您的程序在进行其它处理时不必担心WM_TIMER消息会意外中断了程序。在这方面,定时器类似于键盘和鼠标。驱动程序处理异步硬件中断事件,Windows把这些事件翻译为规律、结构化和顺序化的消息。在Windows 98中,定时器与其下的PC定时器一样具有55毫秒的分辨率。在Microsoft Windows NT中,定时器的分辨率为10毫秒。Windows应用程序不能以高于这些分辨率的频率(在Windows 98下,每秒18.2次,在Wi原创 2010-07-18 08:57:00 · 481 阅读 · 0 评论 -
API入门系列之三 -那迷惑人的Windows字符和字符指针类型
API入门系列之三 -那迷惑人的Windows字符和字符指针类型<br /> <br /> <br />大家好,通过前面两篇打头文章,我也看了留言,感谢那些给我提意见的人和指出错误之处的人。再次谢谢你们的支持。 另外,Windows SDK编程交流群已经建立了,欢迎各位志同道合者加入进行交流( 群号:81543028 )<br /> <br /> 本打算通过前面两篇文章的讲解,后来的系列就可以通过使用一些简单的,常用的API写一些示例程序的讲解进行,但是发现还有一个不得不先讲一讲的要点,Windows下和转载 2010-07-17 14:19:00 · 377 阅读 · 0 评论 -
API入门系列之一 -那‘烦人’的Windows数据类型。
<br />API入门系列之一 -那‘烦人’的Windows数据类型。 <br /> <br />Hello Everybody This is beyondcode<br /> 大家好 再次自我介绍一下 我是beyondcode, 这次心血来潮, 计划着做一系列关于Windows API 编程的教程,用于帮助一些在Windows API编程上有疑惑的,纳闷的,迷惑的新手朋友们。<br /> 先解释一些术语或名词吧 SDK是Software Development Kit的简写,也就是软件开发包的意转载 2010-07-17 14:16:00 · 347 阅读 · 0 评论 -
GPIO中断
<br />不用TIMER,那必须要用一个线程轮询才行,在一个线程中WaitForObject()即可。这样不会占用CPU资源的,因为它一直卡在WaitForObject()那里<br /><br /><br />顺着师兄的脚印我稍微再详细点:<br />1、GPIO的地址映射;<br />2、GPIO的初始化,通过GPXCON设置相应拐角的中断触发方式;<br />3、使用KernelIoControl动态申请中断号;<br />4、用CreatEvent创建中断事件;<br />5、使用InitInte原创 2010-07-18 15:23:00 · 659 阅读 · 0 评论 -
Platform Builder
<br />相信看到我以前写的文章你已经会利用定制平台向导来定制简单的内核了。这次我仍然用这个向导,只不过采用自定义配置来选择平台的组件。自定义配置的优点是能够更细致的选择组件,这样定制的平台只包含我们需要的功能,而不要的全部抛弃。首先打开"New Platform",在"Step 2"中选择"EMULATOR: X86"。在这里强调一点:能够运行PB创建的CE平台的环境有三种。第一种是真实环境,包括某一种CPU和支持的主板还有其它配置;第二种是模拟环境,PB包含了模拟器,能够在PC上模拟运行CE平台;第三转载 2010-07-19 16:20:00 · 1548 阅读 · 0 评论 -
Usb在CE下面就是一个串口 ????
<br />Usb在CE下面就是一个串口 <br />我把一个source code贴出来你们看看 <br /><br />BOOL serialSetup(LPCTSTR dev, DWORD baudrate, DWORD parity, BOOL errorCheck, DWORD stop) <br />{ <br />DCB dcb; <br />BOOL fSuccess; <br />// ErrorMessage(dev); <br />/转载 2010-07-18 19:49:00 · 454 阅读 · 0 评论 -
Microsoft Windows CE 编程的十点忠告
<br />我们起步于Microsoft Win32代码,当然 Windows CE是基于Win32应用程序接口(API)的。有利的是,我们的应用程序(即Raima 数据管理器)有方便的使用接口,并包含一个大约由150个子函数组成的库,这些函数都是由C语言写成,可以用来创建、管理和访问数据库。<br />按建立应用程序的方式来说,我们原以为将它移植到Windows CE中是一项相对简单的C语言编程练习。然而,我们不久便遇到好些困难。从粗心大意的错误开始,比如在基于Windows NT 的Windows CE转载 2010-07-19 16:24:00 · 485 阅读 · 0 评论 -
在WinCE 6.0系统下实现USB功能定制
<br />USB的广泛使用就不用多说了,相信目前的各个领域的嵌入式产品中,很少有不用USB的。USB是主从结构的,分为USB Host和USB Slave,从USB1.0,USB1.1到现在的USB2.0,基于USB2.0还有USB OTG,也就是同时支持Host和Slave设备。目前最新的好像是USB3.0,刚开始普及吧。 <br />在WinCE6.0中,对USB是有很好的支持。一般来说,如果USB的设备驱动做好了,USB的协议层以及上层的使用都是现成的,而且还有源码。也就是说,我们只须要在BSP中完转载 2010-07-18 12:56:00 · 502 阅读 · 0 评论 -
WinCE USB驱动开发
WinCE USB驱动开发错走冤枉路<br />随着USB2.0设备的不断增加,USB设备驱动开发在嵌入式开发中变的越来越重要。Windows CE支持USB 2.0更是对这一波新技术浪潮产生巨大的推动。近期我负责一个这样的项目,在WinCE下开发USB接口的外围设备驱动。当时做这个项目花费了我相当多的时间和精力,错走许多冤枉路使我精疲力尽。<br /> 项目需求是在已调好的ARM9板子上开发USB WiFi无线网卡的驱动程序,具体要求是驱动程序平台是WinCE,CPU类型支持ARM构架,要能比较方便原创 2010-07-18 12:13:00 · 686 阅读 · 0 评论