返回首页

{A}
{S0}简介
本文介绍如何创建Windows CE的串行驱动程序。这将添加一个新的串行(COM)端口设备,允许应用程序使用相同的方式使用标准的硬件端口的端口。新的虚拟端口提供硬件端口相同的接口。背景
创建一个虚拟端口的目的是为了让应用程序(如TomTom和世)从GPS接收天线连接到硬件串行端口(COM1),并保存接收到的GPS信号播放需要时,数据模拟实际驾驶。使用代码
驱动程序是一个DLL,出口以下功能:COM_InitCOM_DeinitCOM_OpenCOM_CloseCOM_ReadCOM_WriteCOM_SeekCOM_IOControlCOM_PowerDownCOM_PowerUp

DEMODLL_API DWORD COM_Init(

     LPCTSTR pContext, LPCVOID lpvBusContext );

DEMODLL_API BOOL COM_Deinit(

     DWORD hDeviceContext );

DEMODLL_API DWORD COM_Open(

     DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode );

DEMODLL_API BOOL COM_Close(

     DWORD hOpenContext );

DEMODLL_API BOOL COM_IOControl(

     DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn,

     PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut );

DEMODLL_API void COM_PowerUp(

     DWORD hDeviceContext );

DEMODLL_API void COM_PowerDown(

     DWORD hDeviceContext );

DEMODLL_API DWORD COM_Read(

     DWORD hOpenContext, LPVOID pBuffer, DWORD Count );

DEMODLL_API DWORD COM_Write(

     DWORD hOpenContext, LPCVOID pBuffer, DWORD Count );

DEMODLL_API DWORD COM_Seek(

     DWORD hOpenContext, long Amount, WORD Type );

在当前采样驱动程序,我们新的串行端口映射到硬件端口(管理端口),因此新的端口上的所有操作都将执行相同的操作上的管理端口。我们也打开日志文件,我们写这个日志的所有执行的操作。
另一个重要组成部分,是如何在Pocket PC设备上安装的驱动程序。 DLL文件必须放置在\ Windows目录,注册表必须更新以下信息:{C}
在这个例子中,我们创建了一个虚拟端口COM6,但是这可以是任何数字从1到9。 ManagePort条目不需要由操作系统创建一个串行端口。这个项目是用我们的演示驱动程序定义的硬件端口号映射到。
安装驱动程序的最简单方法是创建一个CAB文件,将复制DemoDriver.dll的文件到\ Windows目录,并更新所有的注册表设置。我们提供了一个范例。inf文件与CabWiz用​​于创建一个CAB文件。
[Version]

Signature    = "$Windows NT$"

Provider    = "Code Project"

CESignature    = "$Windows CE$"



[CEStrings]

AppName = "DemoDriver"

InstallDir = %CE2%



[Strings]

reg_path = Drivers\Builtin\Serial6



[DefaultInstall]

CopyFiles    = Dllfiles

Addreg        = Regkeys



[SourceDisksNames]

1 =, "Common Files",, .



[SourceDisksFiles]

DemoDriver.dll    = 1



[DestinationDirs]

Dllfiles = 0, %CE2%



[Dllfiles]

"DemoDriver.dll"



[Regkeys]

HKLM,%reg_path%,Dll,0x00000000,DemoDriver.dll

HKLM,%reg_path%,Prefix,0x00000000,COM

HKLM,%reg_path%,FriendlyName,0x00000000,Demo Driver

HKLM,%reg_path%,Index,0x00010001,6

HKLM,%reg_path%,Order,0x00010001,2

HKLM,%reg_path%,ManagePort,0x00010001,1

CAB文件,我们把它复制到设备,然后单击安装。软复位是必要的OS开始运作的驱动程序。
为了使WM5的设备驱动程序的工作,我们已经签署的DLL。在这个例子中,我们使用本文提供的方法:(感谢作者)。我们的例子包括自签名证书MyCert.pfx和驾驶室\ PreXML_MyCert.xml文件,我们提供CabWiz创建CAB文件的同时。
签署的驱动程序,我们称之为:
signtool.exe sign /f MyCert.pfx DemoDriver.dll

要创建一个CAB文件,我们运行:
CabWiz.exe driver.inf /prexml PreXML_MyCert.xml
历史2006年3月7日 - 第一个版本。2006年3月27日, - 增加了WM5的支持代码签名。

回答

评论会员:pguido 时间:2011/12/06
你认为是可能实现的可能性,使用不同的速度(波特率)
真实的和虚拟的港口之间的呢?例如
评论会员:?经理 时间:2011/12/06
作为voquochung,我不能加载驱动程序,在WM5.0也不WM6.0。驱动程序初始化,因为我可以检查日志中的Init消息,但它不负载,也不会出现在Active注册表文件夹。

任何想法或解决呢?
感谢和问候
评论会员:voquochung 时间:2011/12/06
这是一篇好文章,我试图在Visual C 2005重新编码
我compliled dll文件,CAB文件安装到基于Windows CE的掌上电脑。
看来,驱动程序无法加载(/ Windows的DLL)。我查了注册表和我DIN看不到它的活动文件夹中的任何条目。任何身体有想法?

评论会员:游客 时间:2011/12/06
SreekanthMuralidharan
大家好
我一直在开发应用程序复制到SIM卡的手机短信。我用SIM卡的API来完成这项工作。我能够正确复制的消息,但没有得到更新与复制的消息在消息应用程序的收件箱列表。我使用Windows Mobile 5.0平台开发应用程序。
有谁在这里对这个问题的任何解决方案? - Sreekanth

Sreekanth Muralidharan,
顾问企业系统[嵌入式系统],
印度
评论会员:poornimaniranjan 时间:2011/12/06
发送示例程序创建虚拟COM端口和应用程序从COM端口读取数据

关于
PoornimaNiranjan
评论会员:mk175 时间:2011/12/06
很好的工作!你知道如果可能的话来确定进程(名称)连接到虚拟端口吗?
评论会员:kathalora 时间:2011/12/06
IM目前新的掌上电脑编程。这是适用于蓝牙和GPRS吗?我有一个MFC应用程序,但我不能似乎Sparkfun蓝牙工作。
我无法理解这是如何工作的呢?
伊夫已经安装在PDA中的DLL,但我不知道如何使它工作。
评论会员:尤金Ochakovski 时间:2011/12/06
我不明白它是如何涉及到GPRS?这是一个串口驱动。你的问题是不明确的。
评论会员:kathalora 时间:2011/12/06
我们对此深感抱歉... ...但我还是能理解这是如何工作的。我如何利用我当前的项目呢?你有样本项目或一步一步程序?

评论会员:konbanke 时间:2011/12/06
您好,
这项工作是否与Windows CE或微软移动5.0 我想我的PDA(Windows CE或微软移动5.0),可以与我的电脑通过蓝牙或GPRS通信。
感谢。
评论会员:EricGHLU 时间:2011/12/06
您好:是它的管理端口映射的物理端口有必要吗?是否有可能使用这个驱动程序创建虚拟COM端口对:无连接的物理端口(范例COM6/COM7)。然后,我们可以交换数据之间的COM6和COM7(Application1到COM6可以写数据和不同application2 COM7的数据可以读取。)
评论会员:尤金Ochakovski 时间:2011/12/06
如果你想工作,而无需物理连接的虚拟端口,这是可能的,但你必须实现IOCTL_调用设置端口参数和实施等机制,这是有点复杂(例如,一个程序将等待事件端口上收到的数据时,驱动程序必须的信号,即事件)。之后,您将实施隧道(从一读,写,反之亦然)读写功能。
评论会员:EricGHLU 时间:2011/12/06
您好:

我们使用此驱动程序与Windows Mobile 5 PDA手机
我们使用这个驱动程序创建虚拟COM端口:COM7和一些物理端口设置管理端口:COM2(BT GPS接收机端口)

但我们使用application1打开后,管理端口COM2,然后我们用另一个application2打开虚拟COM端口COM7,它是失败的。

但是,如果我们设置管理端口BT GPS Recevier端口:COM6,我们可以使用两个不同的应用程序,同时,成功地打开COM7和COM6

管理端口是否需要BT GPS接收机端口或不?是否有可能对我们设备的管理端口设置任何物理端口(BT GPS接收机端口)?然后我们可以使用两个不同的应用程序同时打开虚拟COM端口和管理端口。

感谢。
评论会员:尤金Ochakovski 时间:2011/12/06
嗨,

你正在试图创造的是港口MUX。这是可以实现使用虚拟端口,允许它的多个连接,但它是不平凡的。您应该只处理一个连接到物理COM端口,然后将其存储接收到的数据,并提供所有打开的连接,虚拟端口。
对于您的问题:它是不可能有多个连接到一个物理端口,即使其中之一是一个虚拟端口。
评论会员:血雾刘 时间:2011/12/06
感谢您的帮助和经验
最好的问候 {S2}
评论会员:。Atlan1980 时间:2011/12/06
我有我的真实端口的GPS设备。在这个工具我的第一个步骤,我在整个超级后很短的时间(2048个字节的数据)的缓冲区溢出。 2000个字节后清除缓冲区(中COM_Read)帮助我停止:

bAnswer = PurgeComm

hComm,
PURGE_TXCLEAR | PURGE_RXCLEAR


谢谢你!这一优良的dll

关于

(对不起我的英文不好)
- 5:41(星期五)七月二十七日,2007年
修改
评论会员:马塞尔Schlebusch 时间:2011/12/06
感谢尤金

我发现这篇文章非常清晰,便于遵循。

RGDS
评论会员:hyohaeng 时间:2011/12/06
我们所有的希望都没有了.. TT
你能不能给一个完整的解释吗?

您好〜
评论会员:尤金Ochakovski 时间:2011/12/06
请你能更具体?
评论会员:kum84 时间:2011/12/06
这串行驱动程序创建一个虚拟端口对通信在一起呢?这意味着,COM0数据传递到COM1。
评论会员:尤金Ochakovski 时间:2011/12/06
提供的示例创建一对,但是,通过隧道发送到COM0的一切是通过COM1和一切都在COM1到COM0。所以,你可以连接到COM0和工作一样的,你会连接到COM1
评论会员:longvalery 时间:2011/12/06
!HI所有
我需要连接的PDA(Qtek900)条形码阅读器,SQL数据库
我想COM端口映射的终端客户开始在PDA上运行如常(不适用于PDA)的工作方案。
是不是真的?
请帮助我。
对不起,我英文不好。

瓦列里
评论会员:pctimhk 时间:2011/12/06
谁能提供一个项目的源代码,在Windows XP中创建的串行端口?
评论会员:科尔达 时间:2011/12/06
是否有可能registrate多个虚拟端口的驱动程序?这些实例之间共享数据?我应该有一些机制来锁结构或驱动程序是一个线程调用时间?

感谢您的伟大和自我解释代码

托马斯
评论会员:尤金Ochakovski 时间:2011/12/06
注册端口创建多个注册表项,在同一个DLL,但不同的端口
不同的实例之间不能共享内存,所以想使用文件或东西... ...