2009-2-25

WinCE service开发总结

因为要做一个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就可以运行了。

0 评论:

发表评论