RAPI简单说明及Sample Code

RAPI简单说明及Sample Code

一.什么是RAPI

         RAPI用来通过ActiveSync来建立PCDevice的通信。通过RAPI可以实现PC Device的控制和同步。

二.使用说明

         常用的RAPI包括File I/O的一些操作,以及获取系统信息的一些API

         在使用RAPI来建立PCDevice的连接的时候,需要首先调用CeRapiInit(),相应的在操作结束之后调用CeRapiUninit()来断开两者的连接。

三.Sample Code

         下面举一个简单的例子来说明RAPI的一个应用实例:

PBYTE pBuffer = NULL;

HANDLE hFile, hPCFile;

DWORD dwBytesReturned = 0;

DWORD dwFileSize = 0;

 

// Step1: initialize

CeRapiInit();

hFile = CeCreateFile(L"//UserDisk//WinCE6.0 RAM Tool.exe", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);

 

if (!hFile)

{

     MessageBox(NULL, TEXT("Open file //UserDisk//WinCE6.0 RAM Tool.exe/n"), NULL, MB_ICONERROR);

}

 

hPCFile = CreateFile(L"D://passion.guo",

     GENERIC_WRITE,

     FILE_SHARE_WRITE|FILE_SHARE_READ,

     NULL,

     CREATE_ALWAYS,

     FILE_ATTRIBUTE_NORMAL,

     NULL);

 

if (!hPCFile)

{

     MessageBox(NULL, TEXT("Create file D://passion.guo failed/n"), NULL, MB_ICONERROR);

}

 

 

dwFileSize = CeGetFileSize(hFile, NULL);

pBuffer = new BYTE[dwFileSize];

 

if (!pBuffer)

     MessageBox(NULL, TEXT("Create buffer failed/n"), NULL, MB_ICONERROR);

 

// step2: copy data from device and write to pc

 

if (!CeReadFile(hFile, pBuffer, dwFileSize, &dwBytesReturned, NULL))

{

     MessageBox(NULL, TEXT("read file failed/n"), NULL, MB_ICONERROR);

}

 

if (!WriteFile(hPCFile,

     pBuffer,

     dwFileSize,

     &dwBytesReturned,

     NULL))

{

     MessageBox(NULL, TEXT("write file failed/n"), NULL, MB_ICONERROR);

}

 

// step 3: Deinit

if (hFile)

     CeCloseHandle(hFile);

if (hPCFile)

     CloseHandle(hPCFile);

 

MessageBox(NULL, TEXT("Test Over!!!!/n"), NULL, MB_ICONERROR);

// CeCopyFile(L"//UserDisk//initobj.dat", L"//UserDisk//bird.dat", false);

CeRapiUninit();

         上述代码实现了将Device上的//UserDisk//WinCE6.0 RAM Tool.exe拷贝到D://passion.guo的功能。

四.常见问题

         编写RAPI的程序需要链接RAPI.lib,但有的时候无法从本机上找到RAPI.lib,可以安装Windows Mobile 6 Standard SDK Refresh.msi来解决该问题。

         另外,有的时候引用rapi.h会出现很多编译错误,这个时候使用Windows Mobile 6 Standard SDK Refresh.msi中的rapi.h就可以了。

         我相信,使用WinCEStandard SDK也可以解决该问题,但是我并没有尝试。

你可能感兴趣的:(windows,File,null,mobile,buffer,WinCE)