Wince5.0 流驱动创建全程 (经典中的经典)
来源:互联网 发布:superview 数据 编辑:程序博客网 时间:2024/05/09 15:21
使用Platform Builder5.0创建Wince5.0的流驱动相当简单,你只需要编写一个修改3个文件,.c,.bib,.reg. 详细步骤如下:
1.用PB5.0创建一个动态链接库(DLL)工程,取名为MyDriver,在第二步选择“A Simple DLL Project".
2.在工程中添加源文件MyDriver.cpp.
#include<windows.h>#include<tchar.h>#define BUFSIZE 256WCHAR achBuffer[BUFSIZE];BOOL WINAPI DllEntry(HANDLE hinstDLL,DWORD deReason,LPVOID lpvReserved){ switch(deReason) { case DLL_PROCESS_ATTACH: RETAILMSG(1,(TEXT("STRINGS:DLL_PROCESS_ATTACH\n"))); return TRUE; case DLL_THREAD_ATTACH: RETAILMSG(1,(TEXT("STRINGS:DLL_THEARD_ATTACH\n"))); return TRUE; case DLL_PROCESS_DETACH: RETAILMSG(1,(TEXT("STRINGS:DLL_PROCESS_DETACH\n"))); return TRUE; case DLL_THREAD_DETACH: RETAILMSG(1,(TEXT("STRINGS:DLL_THEARD_DETACH\n"))); return TRUE;#ifdef UNDER_CE case DLL_PROCESS_EXITING: RETAILMSG(1,(TEXT("STRINGS:DLL_PROCESS_EXITING\n"))); break; case DLL_SYSTEM_STARTED: RETAILMSG(1,(TEXT("STRINGS:DLL_SYSTEM_STARTED\n"))); break;#endif } return TRUE;}//-----------------------------------------------DWORD STR_Init(DWORD dwContext){ DWORD dwRet=0; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Init\n"))); memset(achBuffer,0,BUFSIZE*sizeof(WCHAR)); dwRet=1; return dwRet;}//--------------------------------------------BOOL STR_Deinit(DWORD hDeviceContext){ BOOL bRet=TRUE; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Deinit\n"))); return bRet;}//--------------------------------------------DWORD STR_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD SharMode){ //DWORD bwRet=0; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Open\n"))); return 1;}//--------------------------------------------BOOL STR_Close(DWORD hDeviceContext){ RETAILMSG(1,(TEXT("MYSTRINGS:STR_Close\n"))); return TRUE;}//--------------------------------------------BOOL STR_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut){ RETAILMSG(1,(TEXT("MYSTRINGS:STR_IOControl\n"))); return TRUE;}//--------------------------------------------void STR_PowerDown(DWORD hDeviceContext){ RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerDown\n")));}//--------------------------------------------void STR_PowerUp(DWORD hDeviceContext){ RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerUp\n")));}//--------------------------------------------DWORD STR_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count){ DWORD dwRet=0; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Read\n"))); DWORD cbBuffer=wcslen(achBuffer); dwRet=min(cbBuffer,Count); wcsncpy((LPWSTR)pBuffer,achBuffer,dwRet); return dwRet;}//--------------------------------------------DWORD STR_Seek(DWORD hOpenContext, long Amount,DWORD Type){ DWORD dwRet=0; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Seek\n"))); return dwRet;}//--------------------------------------------DWORD STR_Write(DWORD hOpenContext, LPCVOID pSourceBytes, DWORD NumberOfBytes){ DWORD dwRet=0; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Write\n"))); //DWORD cbBuffer=wcslen(achBuffer); dwRet=min(BUFSIZE,NumberOfBytes); wcsncpy(achBuffer,(LPWSTR)pSourceBytes,dwRet); return dwRet;}
3.打开PB5.0为你自动创建的MyDriver.reg文件,输入以下内容并保存
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\STRING]
"Index"=dword:1
"Prefix"="STR"
"Dll"="MyDriver.dll"
"Order"=dword:0
4.修改MyDriver.def文件
LIBRARY MyDriver
EXPORTS
STR_Init
STR_Deinit
STR_Open
STR_Close
STR_Read
STR_Write
STR_Seek
STR_IOControl
STR_PowerDown
STR_PowerUp
PB5.0在你创建工程的时候已经为你自动编写好了source和Makefile文件,现在需要做的就是点击Sysgen进行编译。然后连接模拟器,系统启动后,会在debug窗口找到以下内容:
STRINGS:DLL_PROCESS_ATTACH,MYSTRINGS:STR_Init
这说明系统已经加载了MyDriver.dll驱动并调用STR_Init函数初始化设备。
5.编写应用程序测试
在pb下新建一个WCE Application(test_MyDriver)工程,编写简单的测试程序如下:
// test_MyDriver.cpp : Defines the entry point for the application.//#include "stdafx.h"int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){// Open the STRINGS driver with READ and WRITE access HANDLE hStr = CreateFile(TEXT("STR1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); if (INVALID_HANDLE_VALUE == hStr) { MessageBox(NULL, _T("Cannot open STR1:"), _T("StringApp"), MB_OK); return 0; } MessageBox(NULL, TEXT("What"), TEXT("StringApp"), MB_OK); // Disconnect from driver. CloseHandle(hStr); return 0;}
编译后在wince的windows目录下会找到test_MyDriver.exe文件,双击该文件,会在debug窗口发现以下内容:
MYSTRINGS:STR_Open,MYSTRINGS:STR_Close
说明应用程序已经成功调用了MyDriver驱动程序。
- Wince5.0 流驱动创建全程 (经典中的经典)
- WinCE5.0入门全程导学!(开发环境建立+流驱动开发)
- WinCE5.0入门全程导学!(开发环境建立+流驱动开发)
- 经典中的经典
- 经典中的经典
- 经典中的经典
- Wince5.0 Camera 驱动分析
- Wince5.0 Camera 驱动分析
- WinCE5.0的USB Camera流接口驱动开发
- 利用EVC快速开发WINCE5.0的流驱动(转载)
- WinCE5.0的USB Camera流接口驱动开发
- WINCE5.0增加SPI流设备驱动的步骤说明
- WinCE5.0入门全过程(含流驱动开发)
- WinCE5.0的USB Camera流接口驱动开发
- 经典中的经典,领教了!
- 经典中的经典,启发人类。
- css技巧-经典中的经典
- wince5.0电池驱动样本分析
- JDK的设置方法
- WinCE 流驱动一步一步来(转载)
- 项目总结:别以为tomcat很简单
- Wrk中IO部分学习总结
- 快乐工作-职场中有效的自我息怒四方法
- Wince5.0 流驱动创建全程 (经典中的经典)
- 暑假是个神马东西?
- 两个Activity跳转的时,如何自定义翻页效果
- 自我时间管理的十大技巧
- CSS盒子模型
- 桌游......
- DataGridView生成CSV,XML 和 EXCEL文件
- java导出excel--------自己学习使用
- Oracle用imp和exp实现数据的导入和导出