使用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 256
WCHAR 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驅動程序。