积极答复者
虚拟串口的问题

问题
答案
-
你首先需要了解一下WINCE中流接口驱动的原理,知道应用是怎么和驱动交互数据的,就好办了。WINCE中ReadFile的定义是
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
当应用中调用ReadFile时,用户要传递一个指针型变量给ReadFile中的第2个参数,而这个指针会由系统传递到被调用的流驱动中的XXX_Read中的第2个参数,看XXX_Read的定义DWORD XXX_Read(
DWORD hOpenContext,
LPVOID pBuffer,
DWORD Count
);
也就是说,ReadFile传递一个指针给驱动中的XXX_Read,然后可以在流驱动中把某个内存区域中的数据读出来,填充到这个指针指向的地址,这样,在ReadFile中就可以获得这些数据了。
而调用WriteFile时,
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
首先将数据填充到第2个指针参数指向的地址,然后这个指针会由系统传递到流驱动中的XXX_Write的第2个参数,
DWORD XXX_Write(
DWORD hOpenContext,
LPCVOID pBuffer,
DWORD Count
);
然后在XXX_Write中把这个指针指向的地址中的数据写到某个内存地址中去。
搞清楚这些后,你所要做的就是建立2个流驱动,然后创建一个他们都能访问的共享内存区域。这样就可以调用WriteFile打开一个流驱动,往这个共享区域写入一些数据,而调用ReadFile时,会打开另一个流驱动,把这个区域中的数据取出并回传给应用程序。
全部回复
-
你首先需要了解一下WINCE中流接口驱动的原理,知道应用是怎么和驱动交互数据的,就好办了。WINCE中ReadFile的定义是
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
当应用中调用ReadFile时,用户要传递一个指针型变量给ReadFile中的第2个参数,而这个指针会由系统传递到被调用的流驱动中的XXX_Read中的第2个参数,看XXX_Read的定义DWORD XXX_Read(
DWORD hOpenContext,
LPVOID pBuffer,
DWORD Count
);
也就是说,ReadFile传递一个指针给驱动中的XXX_Read,然后可以在流驱动中把某个内存区域中的数据读出来,填充到这个指针指向的地址,这样,在ReadFile中就可以获得这些数据了。
而调用WriteFile时,
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
首先将数据填充到第2个指针参数指向的地址,然后这个指针会由系统传递到流驱动中的XXX_Write的第2个参数,
DWORD XXX_Write(
DWORD hOpenContext,
LPCVOID pBuffer,
DWORD Count
);
然后在XXX_Write中把这个指针指向的地址中的数据写到某个内存地址中去。
搞清楚这些后,你所要做的就是建立2个流驱动,然后创建一个他们都能访问的共享内存区域。这样就可以调用WriteFile打开一个流驱动,往这个共享区域写入一些数据,而调用ReadFile时,会打开另一个流驱动,把这个区域中的数据取出并回传给应用程序。 -
谢谢张强老师.
流驱动我不太懂,经您讲解后,我进一步的了解了.
问题(1):假如虚拟串口Com99和COm100对应, Com99数据地址如何定义,在什么地方定义(或者一个共享内存如何与Com99相关联或者WriteFile和ReadFile的地址如何指定)? 是不是要DDK或CreateFileMapping?
问题(2):在调用其它类型的流驱动中,WriteFile 或 ReadFile 函数中的参数地址是不是都是共享内存方式建立的(CreateFileMapping), 一般推荐什么方式建立?
问题(3):用这种方式(老师介绍的方法)实现的流驱动与 目录\WinCE500\Platform\CPU's folder\DRIVERS\SERIAL 下的驱动有何不同? 它们肯定有不同, 如何更好的把这二种驱动的关系理顺?
(不知是否描述清楚了, 请老师们指导)