因为要做一个CDMA/WiFi连接管理监视模块,所以开始研究WinCE service开发。虽然网上有一些文章将如何开发service,包括MSDN上有一些例子说明,开发过程中还是遇到一些问题导致耽搁了好久。特此记录以帮助可能遇到同样问题的后来人。
第一步,建立一个WinCE dll工程。
第二步,按照service开发规则定义一系列接口,并定义def文件。
extern"C" DWORD __declspec(dllexport) TSX_Init (DWORD dwContext);
extern"C" DWORD __declspec(dllexport) TSX_Deinit (DWORD dwContext);
extern"C" DWORD __declspec(dllexport) TSX_IOControl (DWORD dwOpen, DWORD dwCode,
PBYTE pIn, DWORD dwIn,
PBYTE pOut, DWORD dwOut,
DWORD *pdwBytesWritten);
extern"C" DWORD __declspec(dllexport) TSX_Write( DWORD dwData, LPCVOID pInBuf, DWORD dwInLen) ;
extern"C" DWORD__declspec(dllexport) TSX_Seek( DWORD dwData, long pos, DWORD type);
extern"C" DWORD__declspec(dllexport) TSX_Read( DWORD dwData, LPVOID pBuf, DWORD dwLen) ;
extern"C" DWORD __declspec(dllexport) TSX_Open( DWORD dwData, DWORD dwAccess, DWORD dwShareMode) ;
extern"C" DWORD__declspec(dllexport) TSX_Close(DWORD dwData) ;
def文件定义如下:
EXPORTS
; Explicit exports can go here
TSX_Deinit
TSX_Init
TSX_IOControl
TSX_Close
TSX_Open
TSX_Read
TSX_Seek
TSX_Write
提示:这里的前缀有特殊用处,将会出现在后面的注册表内容里,用于services.exe进行方法引用。
第三步,开发代码。如果需要在某处打断点调试,需要使用DebugBreak()方法。我在VS2008里尝试F9是无法将程序断下来。但是在PBCE中F9还是有效的。
第四步,编译并生成DLL文件。
第五步,开始调试。首先,启动Emulator,并通过VS2008自带的remote file viewer将dll传到/window目录下。然后,通过remote registry editor编辑service注册信息。
[HKEY_LOCAL_MACHINE\Services\TESTSVC]
"Dll"="testsvc.dll"
"Order"=dword:8
"Keep"=dword:1
"Prefix"="TSX"
"Index"=dword:0
"Context"=dword:0
"DisplayName"="Sample MFC Service"
"Description"="Sample Service demonstratig MFC usage"
提示:Prefix就是接口使用的前缀
第六步,重启Emulator,如果没有什么错误的话,service就可以运行了。
假期休眠状态(牛牛3)。
1 年前
0 评论:
发表评论