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驱动程序。

 

原创粉丝点击