Wince_应用程序
文章平均质量分 54
你来吻
能够使用VC和CBC VS2005编辑软件,能够使用CCS开发DSP。能够使用PB编写wince 驱动,能够使用ADS。
有一个漂亮的媳妇和一个可爱的女儿。
就这么简单。
每天要看一篇旧的日志,每天睡前要想想今天做了什么。明天的简单计划是什么?
展开
-
WinCE5.0下如何截屏并保存为BMP文件
前一篇介绍了如何在应用程序中操作FrameBuffer,实际上得到FrameBuffer后,对于我们来说截取屏幕就是很容易的事情了,完全可以绕开GDI,并且效率要比使用GDI高。 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1转载 2010-03-04 14:18:00 · 1715 阅读 · 0 评论 -
TCPMP中使用GDI、Direct及DirectDraw效果对比
早先跟ZL讨论过WinCE6.0下使用TCPMP播放视频的问题。他认为直接写显存应该可以让视频播放更流畅。今天我在我们的平台上实际测试了一下,分别使用GDI、Direct和DirectDraw三种方式做了Benchmark,其中Direct就是他所说的直接写显存的方式。 为了让TCPMP支持Direct的方式,需要修改overlay_direct.c中的相关代码,使其能够直接访问CE转载 2010-03-01 13:58:00 · 1071 阅读 · 0 评论 -
WinCE5.0中应用程序如何直接写屏
以前曾利用GAPI实现应用程序直接操作显示驱动的FrameBuffer,以提高屏幕绘图和视频播放的效率。GAPI依赖于显示驱动,必须在显示驱动中添加相应的接口才能正常使用。如果平台是我们自己定制的,在WinCE5.0中,我们也可以通过另外一种方法来操作FrameBuffer。 以DeviceEmulator为例,我们已经知道FrameBuffer的物理地址是0x30100000,大小为0x1转载 2010-03-04 14:26:00 · 878 阅读 · 0 评论 -
WinCE开发How to大集合之 WinCE下读写串口非常简单好用的例程
WinCE下读写串口非常简单好用的例程 //打开串口 hPort=CreateFile(lpszPortName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); BOOL CSerial::InitDCB() { DCB PortDCB;//声明一个DCB结构 DW转载 2010-03-05 13:48:00 · 2685 阅读 · 0 评论 -
WinCE开发How to大集合之在Bootloader, WinCE,应用程序间传递参数的方法
基本思想就是在Nand Flash等固态存储器中保存这个变量实现方法有很多种,如果你使用的是EBoot,EBoot的例子中会有一个BOOT_CFG的结构体,默认保存EBoot参数的,这个参数保存在固态存储器上,可以参考WINCE500/PLATFORM/SMDK2410/SRC/BOOTLOADER/EBOOT/main.c这样解决了保存变量的问题,但是如何在Bootloader与操作系统间传递参转载 2010-03-05 13:44:00 · 684 阅读 · 0 评论 -
变量被重复定义的问题的讨论
变量被重复定义的问题,敬请指教:在Fat32.h中定义: #ifndef _FAT32_H#define _FAT32_Hstruct FileInfoStruct FileInfo; //文件信息结构体实体struct FAT32_Init_Arg Init_Arg; //初始化参数结构体实体#endif在fat32.c中#i nclude "fat32.原创 2010-01-08 11:57:00 · 3390 阅读 · 0 评论 -
WinCE将HDC保存为BMP文件
<br />HDC在MSDN中的全称为:The handle of device context。通常,我们都是用来做相应的显示操作。<br />熟悉WIN32的朋友对于其应该不会陌生,经常采用GetDC,GetWindowDC等等来获取其句柄。而用得最多的,可能就是BeginPaint,如:case WM_PAINT: HDC hdc = BeginPaint(hWnd,&ps); ... EndPaint(hdc,&ps); break; <br />使用起来非转载 2010-12-15 10:50:00 · 1037 阅读 · 0 评论 -
VirtualCopy in WinCE6.0
<br />在CE4.2/5.0里面滚打多年的兄弟应该经常用这个函数吧。这个函数方便驱动和应用程序范围任何的物理地址,包括物理内存啊,设备控制器的寄存器啊,甚至GPIO也可以在AP里面随便拉上拉下。<br />这个函数虽然方便,但是并不安全,你想你好不容易把一个功能完善的image给build出来了,结果碰到了一个写AP的“高手”,把你的寄存器和共享内存中的数据修改得一塌糊涂,最后报出bug来说你驱动的你会不会晕倒!<br />还好从CE6.0开始我们可以安枕无忧了,因为AP再也不能调用VirtualCop转载 2010-10-29 13:48:00 · 568 阅读 · 0 评论 -
C++中extern “C”含义深层探索及extern用法详解
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。 2.从标准头文件说起 某企业曾经给出如下的一道面试题: 面试题 为什么标准头文件都有类似以下的结构?原创 2010-10-29 14:30:00 · 961 阅读 · 0 评论 -
vs2005 添加 include路径
<br />vs2005 添加 include路径在项目菜单下的属性目录中的C++常规选项下的附加包含路径!原创 2010-10-29 15:55:00 · 2394 阅读 · 0 评论 -
PC端通过USB与wince通信
<br />这两天应朋友要求,做一个上位机的小程序,能够控制wince读写U盘.以前没做过wince的东东,于是网上搜索一下,发现了rapi.dll这个东西。<br />动态获取dll里面的函数。<br />hInst = LoadLibrary(sPath);<br />if (hInst)<br />{<br /> CeRapiInit = (FARPROC) GetProcAddress(hInst, "CeRapiInit");<br /> CeRapiUninit = (FA转载 2010-12-21 16:40:00 · 2508 阅读 · 0 评论 -
WINCE应用程序和驱动间通信
WinCE上驱动程序的模型相对比较简单,实现一个驱动程序不是什么难事。尽管如此,本文还是实现了一个比较通用一点的通讯接口。应用程序发给信息驱动程序有两种方式,同步调用和异步调用。同步调用能够让驱动程序立即处理应用程序的请求,并返回驱动程序处理后的结果。如:#define MSG_TYPE_TEST_1 0x00000000#define MSG_TYPE_ICMP_PACKET 0x00000001#pragma pack(push, 1)typedef struct __IO_原创 2010-10-30 19:28:00 · 771 阅读 · 0 评论 -
关于VirtualAlloc和VirtualCopy
<br />弄清楚这个问题首先要了解VirtualCopy和VirtualAlloc这2个函数的实现和目的,以及wince下动态虚拟内存映射和静态虚拟内存映射。 <br />先说VirtualAlloc 和VirtualCopy<br />VirtualAlloc 首先会从我们的虚拟地址空间中申请(或者说预留)一块虚拟空间,准备接下来要用它。注意此时,可用的物理内存并没有减少,只是虚拟地址少了一块可用的区域。 <br />真正把这块之前reserved的虚拟空间映射到物理的内存区域就是由VirtualCop转载 2010-10-29 13:47:00 · 800 阅读 · 0 评论 -
关于fatal error C1853: 'Debug/TrafficDet.pch' is not a precompiled header file created with this compiler
<br />以前也常常碰到这样的问题。今天决定去解决它,就找了找网上的资料,顺便自己试验了一下。<br />网上资料讲解:<br /> (1)在菜单栏里的工程 -> 设置 -> C/C++ 中,预编译的的头文件选项卡,选择“不使用预补偿页眉”单选项就可以了。不过这种方法的缺点是以后每次编译都会比较慢。<br /> (2)由于在大的工程里,有一些头文件经常使用,往往就会导致这样的编译错误。解决办法是把这些经常使用的头文件写入一个文件(比如precompile.h)里,就如MFC程序里的stdAfx.h一原创 2010-10-29 16:08:00 · 5937 阅读 · 0 评论 -
wince 加载JPG问题 引
MFC提供的CWnd只有默认加载BMP文件的接口,对JPG等图像是不支持。加载.JPG格式的图片,有两种方法,用流对象+IPicture接口加载;IImage接口加载。原创 2010-11-01 09:18:00 · 647 阅读 · 0 评论 -
VC如何问题集锦(不断更新中...)
<br />1.在MFC中如何获得一个CBitmap的宽和高?<br />BITMAP bmp;<br />bmpIamge.GetBitmap(&bmp);<br />int nWidth = bmp.bmWidth;<br />int nHeight = bmp.bmHeight; <br />2.如何修改这个CBitmap的大小?<br />CBitmap是不能重复使用CreateCompatibleBitmap创建的,需要先释放原来的Bitmap Object 。<br /> <br />原创 2010-11-01 14:53:00 · 434 阅读 · 0 评论 -
USB通讯
<br />1、端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点)<br />2、帧:时间概念,在USB中,一帧就是1MS,他是个单独的单元,包含了一系列总线动作,USB将1帧分为好几份,每一份中是个USB的传输动作。<br />3、上行、下行:设备到主机为上行,主机到设备为下行<br />下面以一问一答的形式开始学习吧。<br />问题一:USB的传输线结构是如何的呢?<br />答案转载 2010-11-08 14:21:00 · 1173 阅读 · 2 评论 -
内存泄漏,当您使用的 GetDC 方法和 ReleaseDC 方法 CWnd 类版本
重现行为的步骤<br />是从 CWnd 派生的类的一个方法中插入下面的代码在您的应用程序中: CDC *pDC; RECT rect; GetClientRect (&rect); for (int i = 0; i < 1000; i++) { pDC = GetDC (); ReleaseDC (pDC); }<br />如果运行此代码,并且之前和之后运行该代码然后检查系统内存您注意到系统内存泄漏原创 2010-11-08 14:32:00 · 1797 阅读 · 0 评论 -
VC线程同步方法
<br />VC MFC中线程同步对象的区别 <br />临界区 CCriticalSection,在用户模式工作,适用于保护线程间共享资源,一个线程可以多次Lock不会出错。不支持在多进程之间工作。<br /><br />互斥量 CMutex,在内核模式工作,除了支持临界区的功能,还可以为互斥量命名,以便在多进程中工作。互斥量比临界区耗资源。<br /><br /> 事件 CEvent,在内核模式工作,适用于一个线程等待另一个线程完成某任务。<br /><br />信号量转载 2011-01-03 11:07:00 · 5946 阅读 · 1 评论 -
Wince中的文件操作
<br /><br />序言<br />Wince中的文件操作使用传统的基于句柄的方法;文件通过返回句柄的函数打开;读取和写入函数被传递句柄以便指出要操作的函数;数据在文件中读取和写入的偏移量由系统维护的文件指针来指出;最后当读取和写入完成时,应用程序通过关闭文件句柄来表示操作的结束。<br />正文<br />1.1 创建和打开文件<br /> HANDLE CreateFile( LPCTSTR lpFileName,<br />转载 2010-11-16 13:31:00 · 1660 阅读 · 0 评论 -
wince Vs2005下SHBrowseForFolder用法
添加 文件头#include "Shlobj.h"// CDiagnosParamDlg 对话框#pragma comment (lib,"Ceshell.lib")使用wchar_t dir[200]; BROWSEINFO bi; bi.hwndOwner=NULL; bi.pidlRoot=NULL; bi.pszDisplayName=L"选择诊断文件"; bi.lpszTitle=L"DD"; bi.ulFlags=0; bi原创 2011-01-12 14:15:00 · 1470 阅读 · 1 评论 -
create与oncreate的区别
OnCreate 在view类中,create 是虚函数由框架调用,是用来“生成一个窗口的子窗口”。 <br /> oncreate 消息响应函数,是用来“表示一个窗口正在生成”。<br /> 某个CWnd的Create函数由当前CWnd的Owner调用, 而在CWnd::Create中,又会调用OnCreate函数,但是实际上这个时候Create函数还没有退出,CWnd的某些部分还没有创建好。所以,在ToolBar::OnCreate中,不能调用CommandToIndex,因为CommandToI转载 2010-11-25 11:23:00 · 5667 阅读 · 1 评论 -
WinCE下开发程序常见问题
<br />一. wince中,如何根据进程名称获得该进程ID<br />DWORD GetProcessID(CString name)<br />{<br /> HANDLE procSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);<br /> if(procSnap == INVALID_HANDLE_VALUE)<br /> {<br /> printf("CreateToolhelp32Snapshot转载 2011-02-24 11:28:00 · 1202 阅读 · 0 评论 -
WinCE6.0中应用程序如何直接访问物理空间
<br />在实际开发过程中,经常希望能在应用程序中直接读写设备的物理空间。以前在做WinCE6.0下的MEMMgr时通过秘密加载一个内核态驱动实现了这个需求。但这种方式有一个明显的缺陷,每次读写都必须经由它才能完成。如果只是读取GPIO,那问题不算大。如果想通过这种方式实现视频播放的加速就比较困难了。估计非但不能加速,反而会变得更慢。<br /> 早先曾与ZL仔细的讨论过这个问题,他当时在WinCE6.0上移植TCPMP,发现播放视频不太流畅,于是想通过直接写显存进行加速。目的很明确,在应用中申原创 2011-02-08 08:55:00 · 573 阅读 · 0 评论 -
在应用程序中自由设置wince输入法
<br />CE中的输入法跟XP下的一样。。最近搞了好久才总算知道咋回事!<br />操作输入法,就是操作 CLSID。只要知道想要的的输入法的 CLSID值就可以自由切到相应的输入法。。<br />如:<br /> BYTE tem[16]={0x99,0xaf,0xaf,0x5a,0x99,0x8d,0x66,0x44,0xa6,0x6d,0x95,0xc4,0x4b,0x60,0x8a,0x84};//手写输入法 CLSID cls;<br /> memcpy(&cls,tem,1原创 2011-02-24 13:00:00 · 1102 阅读 · 1 评论 -
wince软键盘的隐藏和显示
<br />在弹出的模式对话框中,如果有编辑框,需要自动显示软键盘进行输入,并且自动调节软键盘位置。如果不是编辑框,则应该关闭软键盘,并设置到原始位置。<br />继承了CEdit类,处理其获得焦点和失去焦点的消息:<br />ON_CONTROL_REFLECT(EN_SETFOCUS, OnSetfocus)<br />ON_CONTROL_REFLECT(EN_KILLFOCUS, OnKillfocus)<br />void CMyEdit::OnSetfocus() <br />{<br />转载 2011-02-23 16:59:00 · 2333 阅读 · 0 评论 -
wince 设置系统时间
<br />[DllImport("coredll.dll", SetLastError = true)]<br /> public static extern int SetLocalTime(ref SystemTime lpSystemTime);<br /> //struct for date/time apis <br /> public struct SystemTime<br /> {<br /> public sh转载 2011-02-23 15:39:00 · 1024 阅读 · 0 评论 -
设置系统时间
<br />主要讲如何在VC里进行系统时间设置。<br /> <br />1、使用API函数SetLocalTime进行本地时间设置。<br />1)SetLocalTime函数的原型:<br />BOOL SetLocalTime( const SYSTEMTIME *lpSystemTime ); <br />输入参数lpSystemTime是一个SYSTEMTIME类型的参数,如果设置成功,返回true,本地时间将会变成lpSystemTime所指定的时间,否则返回false。<br />看一下SYS原创 2011-03-24 12:38:00 · 695 阅读 · 0 评论 -
WinCE 文件操作
常用的三种方法,归纳如下: 方法一 使用MFC的CFile类 打开用Open,关闭用Close(),文件指针移动用Seek,读文件用Read(),写文件用Write,获取文件属性可以使用GetFileStatus方法,这个可以查看MSDN,下面给几行简单代码:CFile file;bool isOpenOK = file.Open(L"//flash disk//flyfox//test.txt", CFile::typeBinary|CFile::modeRead转载 2011-03-24 12:49:00 · 649 阅读 · 0 评论 -
Windows API串口编程参考
<br /> <br />(一)Windows API串口通信编程概述<br />Windows环境下的串口编程与DOS环境下的串口编程有很大不同。Windows环境下的编程的最大特征之一就是设备无关性,它通过设备驱动程序将Windows应用程序同不同的外部设备隔离。Windows封装了Windows的通信机制,这种方式称为通信API,Windows程序可以利用Windows通信API进行编程,不用对硬件直接进行操作。这种体系被称为Windows开放式服务体系(WOSA,Windows Open Servi转载 2011-03-26 19:19:00 · 1132 阅读 · 0 评论 -
MFC对话框消息传递顺序
<br />view plaincopy to clipboardprint?<br />LRESULT CALLBACK AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) <br />{ <br /> // special message which identifies the window as using AfxWndProc <br /> if (nMsg == WM_QUERYAFXWNDPROC转载 2011-03-27 19:18:00 · 949 阅读 · 0 评论 -
WINCE ARM Datatype misalignment 问题
<br />在arm处理器上,运行程序会遇到Datatype misalignment问题而crash,而同一代码在x86 win32环境上编译后运行良好;<br />其实不管是x86还是arm都会遇到Datatype misalignment问题,比如d3dx用到sse指令优化的D3DXMATRIX时,需要这个变量16字节对齐,否则可能会crash。<br />同一问题在arm上会更明显,因为arm的硬件处理可能没有pc机cpu这么强悍,针对arm的编译器可能也没这么强悍,这就需要我们写代码时候更健壮,考转载 2011-03-28 12:42:00 · 1073 阅读 · 0 评论 -
如何在WINCE开启和关闭软键盘
<br />比如一个EditBox获得焦点后,这个时候自动打开软键盘,这样可以方便用户输入——SIPINFO、SHSIPINFO、SIPSETINFO、SIPGETINFO里面有些参数弄不明白<br />//隐藏输入面板<br />BOOL LowerSip()<br />{<br />BOOL fRes = FALSE;<br />SIPINFO si;<br />memset( &si, 0, sizeof( si ) );<br />si.cbSize = sizeof( si );<br />if(转载 2011-03-30 10:50:00 · 2272 阅读 · 0 评论 -
wince5 模拟器 与 系统共享网卡通讯
最近在做一个项目是用USB模拟网卡,进行通讯但是在程序调试阶段无法进行测试。模拟机连接不到我的XP系统下程序:wince系统又是使用的USB模拟网卡无法下载程序调试郁闷呀!开始自己摸索了一个办法哈哈好事了具体如下:在VS2005工具中设置XP下的一块真实的网卡。然后启动模拟器:设置IP地址,一定要和 XP下那块网卡的地址在一个段里这样就能通讯了吗?绝对不可以。。现在说的才是关键:一个要让XP下的网卡处于工作状态即随便找个网线让他显示有链接这样你的模拟机下网卡才能和XP通讯. 要像右边这样才行。原创 2011-03-31 14:12:00 · 1066 阅读 · 0 评论 -
WinCE虚拟串口驱动(一)
<br /> //========================================================================<br /> //TITLE:<br /> // WinCE虚拟串口驱动(一)<br /> //AUTHOR:<br /> // norains<br /> //DATE:<br /> // Saturday 28-March-2009<br /> //Environment:<br /> // WINDOW转载 2011-04-09 20:42:00 · 696 阅读 · 0 评论 -
WinCE虚拟串口驱动(二)
<br />//========================================================================<br /> //TITLE:<br /> // WinCE虚拟串口驱动(二)<br /> //AUTHOR:<br /> // norains<br /> //DATE:<br /> // Saturday 28-March-2009<br /> //Environment:<br /> // WINDOWS转载 2011-04-09 20:43:00 · 487 阅读 · 0 评论 -
串口接收时丢数据问题解决方案
<br />老规矩,先说下问题:串口在接收pc端发来的数据时(100个bytes,每200ms发送一次),偶尔会丢一些数据。某一次的测试记录如下:<br />第一次丢数据 发送总量60多万字节 丢了27个<br />第二次丢数据 发送总量80多万字节 (在上一次发送的基础上又)丢了40个<br />第三次丢数据 发送总量190多万字节 (在上一次发送的基础上又)丢了37个<br /> <br /> 以上数据要说明的是所丢的数据是一个随机情况,因为如果我把环境清空(例如断电重启)而pc端的发送条件不原创 2011-04-09 20:48:00 · 3776 阅读 · 0 评论 -
16道嵌入式C语言面试题
<br /><br />1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)<br />#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL <br />我在这想看到几件事情: <br />1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) <br />2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 <br />原创 2011-04-18 20:08:00 · 757 阅读 · 1 评论 -
SerialPort类源代码分析
前几篇串口编程大致讲述了Windows下串口的大致操作,接下来分析流行的SerialPort类,它把Windows API封装好,方便开发利用1、Win32下串口大致操作流程(1)打开串口:CreateFile函数(2)建立串口通信事件:CreateEvent函数(3)初始化串口:SetCommState函数(4)建立监视线程,即读写数据线程,因为我们不知道什么时候数据会到来,这里是一个异步事原创 2011-06-13 21:29:00 · 2148 阅读 · 0 评论 -
wince 3串口模拟器
<br />今日做一个PDA系统需要3个串口,编程时需要模拟3个串口使用,<br />而使用以前的方法默认得到的模拟器只有一个串口,因此需要修改修改方法如下:<br />/WINCE500/PLATFORM/Deviceemulator/Src/Drivers/Serial/ser_smdk2410.cpp文件添加<br />class CPdd2410Serial2 : public CPdd2410Uart {<br />public:<br /> CPdd2410Serial2(LPTSTR l原创 2011-04-25 16:45:00 · 2632 阅读 · 0 评论