RAPI简单说明及Sample Code
一.什么是RAPI
RAPI用来通过ActiveSync来建立PC与Device的通信。通过RAPI可以实现PC 对Device的控制和同步。
二.使用说明
常用的RAPI包括File I/O的一些操作,以及获取系统信息的一些API。
在使用RAPI来建立PC与Device的连接的时候,需要首先调用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就可以了。
我相信,使用WinCE的Standard SDK也可以解决该问题,但是我并没有尝试。