PC端通过USB与wince通信
来源:互联网 发布:同款排除软件 编辑:程序博客网 时间:2024/06/15 05:41
这两天应朋友要求,做一个上位机的小程序,能够控制wince读写U盘.以前没做过wince的东东,于是网上搜索一下,发现了rapi.dll这个东西。
动态获取dll里面的函数。
hInst = LoadLibrary(sPath);
if (hInst)
{
CeRapiInit = (FARPROC) GetProcAddress(hInst, "CeRapiInit");
CeRapiUninit = (FARPROC) GetProcAddress(hInst, "CeRapiUninit");
CeCreateFile = (pfnFunc0)GetProcAddress(hInst, "CeCreateFile");
CeWriteFile = (pfnFunc1)GetProcAddress(hInst, "CeWriteFile");
CeCloseHandle = (pfnFunc2)GetProcAddress(hInst, "CeCloseHandle");
CeFindFirstFile = (pfnFunc3)GetProcAddress(hInst, "CeFindFirstFile");
CeGetFileSize = (pfnFunc4)GetProcAddress(hInst, "CeGetFileSize");
CeReadFile = (pfnFunc5)GetProcAddress(hInst, "CeReadFile");
CeFindNextFile = (pfnFunc6)GetProcAddress(hInst, "CeFindNextFile");
CeCreateDirectory = (pfnFunc7)GetProcAddress(hInst, "CeCreateDirectory");
CeCreateProcess = (pfnFunc8)GetProcAddress(hInst, "CeCreateProcess");
CeGetSystemInfo = (pfnFunc9)GetProcAddress(hInst, "CeGetSystemInfo");
}
else
{
FreeLibrary(hInst);
}
这是函数定义原型
typedef struct _CE_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwOID;
WCHAR cFileName[MAX_PATH];
} CE_FIND_DATA, *LPCE_FIND_DATA;
HINSTANCE hInst;
typedef HANDLE (FAR PASCAL * pfnFunc0)(LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE);
typedef BOOL (FAR PASCAL * pfnFunc1)(HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED);
typedef BOOL (FAR PASCAL * pfnFunc2)(HANDLE);
typedef HANDLE (FAR PASCAL * pfnFunc3)(LPCWSTR, LPCE_FIND_DATA);
typedef DWORD (FAR PASCAL * pfnFunc4)(HANDLE, LPDWORD);
typedef BOOL (FAR PASCAL * pfnFunc5)(HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED);
typedef BOOL (FAR PASCAL * pfnFunc6)(HANDLE, LPCE_FIND_DATA);
typedef BOOL (FAR PASCAL * pfnFunc7)(LPCWSTR, LPSECURITY_ATTRIBUTES);
typedef BOOL (FAR PASCAL * pfnFunc8)(LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPWSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION);
typedef VOID (FAR PASCAL * pfnFunc9)(LPSYSTEM_INFO);
pfnFunc0 CeCreateFile;
pfnFunc1 CeWriteFile;
pfnFunc2 CeCloseHandle;
pfnFunc3 CeFindFirstFile;
pfnFunc4 CeGetFileSize;
pfnFunc5 CeReadFile;
pfnFunc6 CeFindNextFile;
pfnFunc7 CeCreateDirectory;
pfnFunc8 CeCreateProcess;
pfnFunc9 CeGetSystemInfo;
FARPROC CeRapiUninit;
FARPROC CeRapiInit;
在msdn里可以找到这些函数的详细信息。
于是写了一个向USB写文件的一个函数
//传输数据到WINCE某一特定文件
BOOL CUsb::UsbWriteDataToCe(BYTE* data, ULONG len)
{
CString sCeFileName = "[url=file:////test.txt]//test.txt[/url]";
BSTR bstr = sCeFileName.AllocSysString();
SysFreeString(bstr);
CeRapiInit();
HANDLE h;
DWORD nBytes;
h = CeCreateFile(bstr, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
while(len > 0)
{
if (len >= BUFFER_SIZE)
nBytes = BUFFER_SIZE;
else
nBytes = len;
CeWriteFile(h, data, nBytes, &nBytes, NULL);
len -= nBytes;
data += nBytes;
}
CeCloseHandle(h);
CeRapiUninit();
return 1;
}
//从wince某一特定文件读数
BOOL CUsb::UsbReadDataFromCe(BYTE* data, ULONG* nLen)
{
CString sCeFileName = "[url=file:////test.txt]//test.txt[/url]";
BSTR bstr = sCeFileName.AllocSysString();
SysFreeString(bstr);
CeRapiInit();
HANDLE h;
DWORD nBytes;
DWORD len = 10000;
h = CeCreateFile(bstr, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
CeGetFileSize(h, &len);
len = 5;
if (len < *nLen)
*nLen = len;
len = *nLen;
while(len > 0)
{
if (len >= BUFFER_SIZE)
nBytes = BUFFER_SIZE;
else
nBytes = len;
CeReadFile(h, data, nBytes, &nBytes, NULL);
len -= nBytes;
data += nBytes;
}
CeCloseHandle(h);
CeRapiUninit();
return 1;
}
- PC端通过USB与wince通信
- Android通过USB与PC通信
- Android通过USB与PC通信
- 【网络通信】Wince 和 PC 通过USB 用Socket 进行通信
- 【网络通信】Wince 和 PC 通过USB 用Socket 进行通信
- PC与Android设备通过USB建立通信连接
- Android作为服务器与PC作为客户端通过USB通信
- 通过USB数据线实现Android端与PC端的通信
- 05 OrangePi通过usb线实现与pc端的网络通信
- BBB 通过USB虚拟的RNDIS与PC的vmware ubuntu 进行网络通信
- pc与Android进行USB通信
- Android与PC通过USB通讯
- Android与PC通过USB通讯
- Android与PC通过USB通讯
- PC通过USB连接Android通信(Socket)
- WINCE USB Serial 通信
- Android手机通过socket与pc通信
- Android手机通过socket与pc通信
- Pelco_D-P协议
- 振铃信号、拨号音、回铃音、忙音是什么样的信号
- windous下面如何搭建Android的开发环境
- 循环冗余检查
- 关于编程学习的七点思索
- PC端通过USB与wince通信
- 汇编学习心得1
- SD演讲资料
- 用 pylint, 写好代码
- http https 区别
- QListView QListWidget 弹出菜单
- 手机软件兼容之桥接模式学习笔记[C++版]
- 数据冗余
- XFire与Spring集成的第一种方式