wince写驱动力程序问题

[复制链接]
 楼主| brotherwen 发表于 2008-4-21 09:02 | 显示全部楼层 |阅读模式
写程序时,<br />在打开驱动时,<br />CreateFile时失败,不知道什么原因
high 发表于 2008-4-21 10:21 | 显示全部楼层

想了几点

1.第一个参数是否严格正确?&nbsp;例如:&nbsp;L&quot;COM1:&quot;<br />2.是否已经正确加载了驱动?&nbsp;可以查看注册表device下的active或者看device是否加载了驱动的dll.<br />3.是否已经被其他应用打开了?重复打开导致的失败.<br />
 楼主| brotherwen 发表于 2008-4-21 15:15 | 显示全部楼层

非常感谢HIGH

感谢下先,由于刚接触WINCE,问题的问题可能让你费解,还是问下哈<br />比如说检查你的1点:如果是严格正确呢??这个L&quot;COM1&quot;怎么来的呢,<br />我是按例子走的_T(&quot;COM1:&quot;)为这什么这样啊,这个东西和什么东西要严格对照呢
 楼主| brotherwen 发表于 2008-4-21 15:20 | 显示全部楼层

我的流程是先加载驱动

nErr=RegCreateKeyEx(HKEY_LOCAL_MACHINE,szRegKey,0,L&quot;&quot;,0,0,NULL,&hDrvKey,&dwDisp);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(nErr!=ERROR_SUCCESS)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(_T(&quot;创建驱动注册表子键失败!&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//往注册表里添加内容<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE_REG_SZ(L&quot;Prefix&quot;,szPrefix);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE_REG_SZ(L&quot;Dll&quot;,szDLL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE_REG_SZ(L&quot;FriendlyName&quot;,szFriendlyName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE_REG_DWORD(L&quot;Order&quot;,DrvOrder);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE_REG_DWORD(L&quot;Index&quot;,DrvIndex);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;HandleDriver=ActivateDeviceEx(szRegKey,NULL,0,NULL);&nbsp;//加载SimpleDriver驱动<br />&nbsp;&nbsp;&nbsp;&nbsp;if(HandleDriver==INVALID_HANDLE_VALUE)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(_T(&quot;加载SimpleDriver失败!&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(_T(&quot;加载SimpleDriver成功!&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />并且成功了<br /><br />hFile=CreateFile(_T(&quot;SPL1:&quot;),GENERIC_READ|GENERIC_WRITE,0,0,&nbsp;OPEN_EXISTING,0,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;//sprintf(buf,&quot;hFile=0x%x&quot;,hFile);<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strTmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;strTmp.Format(_T(&quot;%x&quot;),hFile);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CEdit&nbsp;*pDispEdit=(CEdit*)GetDlgItem(IDC_READ_DISP);<br />&nbsp;&nbsp;&nbsp;&nbsp;pDispEdit-&gtSetWindowText(strTmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(hFile==INVALID_HANDLE_VALUE)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(_T(&quot;不能打开&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(_T(&quot;打开成功!&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />打开驱动时,却总是失败
 楼主| brotherwen 发表于 2008-4-21 15:57 | 显示全部楼层

我生成了一个.DLL文件

hFile=createfile()之前要做哪些具体的事情呢,我怀疑之前的事情没做好
high 发表于 2008-4-23 02:06 | 显示全部楼层

L"COM1:"

L?&nbsp;&nbsp;wince是unicode的,所以L,和_T,&nbsp;&nbsp;TEXT()一个目的---声明是unicode.<br /><br />注册表Index=?这里你应该使得Index=1吧?并且确认<br />&quot;2.是否已经正确加载了驱动?&nbsp;可以查看注册表HKLMdeviceactive或者看device.exe进程里面是否加载了驱动的dll.&quot;
 楼主| brotherwen 发表于 2008-4-23 11:20 | 显示全部楼层

device.exe无法访问

HandleDriver=ActivateDeviceEx(szRegKey,NULL,0,NULL);&nbsp;//加载驱动<br />HandleDriver=0&nbsp;也就是返回值为0<br /><br /><br />nErr=RegCreateKeyEx(HKEY_LOCAL_MACHINE,szRegKey,0,L&quot;&quot;,0,0,NULL,&hDrvKey,&dwDisp);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(nErr!=ERROR_SUCCESS)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(_T(&quot;创建驱动注册表子键失败!&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//往注册表里添加内容<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE_REG_SZ(L&quot;Prefix&quot;,szPrefix);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE_REG_SZ(L&quot;Dll&quot;,szDLL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE_REG_SZ(L&quot;FriendlyName&quot;,szFriendlyName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE_REG_DWORD(L&quot;Order&quot;,DrvOrder);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE_REG_DWORD(L&quot;Index&quot;,DrvIndex);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />之后,注册表的相应位置写上了:<br />Index&nbsp;&nbsp;1<br />Order&nbsp;&nbsp;0<br />Dll&nbsp;&nbsp;&nbsp;&nbsp;simpledriver.dll<br />prefix&nbsp;SIM<br />
aweyfan 发表于 2008-4-23 11:29 | 显示全部楼层

既然失败为什么不 GetLastError?

  
 楼主| brotherwen 发表于 2008-4-23 14:43 | 显示全部楼层

不知道如何用啊

  
high 发表于 2008-4-23 15:46 | 显示全部楼层

prefix SIM

hFile=CreateFile(_T(&quot;SPL1:&quot;),GENERIC_READ|GENERIC_WRITE,0,0,&nbsp;OPEN_EXISTING,0,0);<br /><br />-----有点晕<br /><br />SPL1:&nbsp;&nbsp;--&nbsp;&gt&nbsp;&nbsp;SIM1:
 楼主| brotherwen 发表于 2008-4-23 22:08 | 显示全部楼层

谢谢HIGH大哥,你还是很热心的

搞定了<br />index=0<br />就行了<br />createfile也是相应的前缀0就可以了<br />7楼的是打字打错了,<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

217

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部