打印

wince写驱动力程序问题

[复制链接]
2372|10
手机看帖
扫描二维码
随时随地手机跟帖
沙发
high| | 2008-4-21 10:21 | 只看该作者

想了几点

1.第一个参数是否严格正确? 例如: L"COM1:"
2.是否已经正确加载了驱动? 可以查看注册表device下的active或者看device是否加载了驱动的dll.
3.是否已经被其他应用打开了?重复打开导致的失败.

使用特权

评论回复
板凳
brotherwen|  楼主 | 2008-4-21 15:15 | 只看该作者

非常感谢HIGH

感谢下先,由于刚接触WINCE,问题的问题可能让你费解,还是问下哈
比如说检查你的1点:如果是严格正确呢??这个L"COM1"怎么来的呢,
我是按例子走的_T("COM1:")为这什么这样啊,这个东西和什么东西要严格对照呢

使用特权

评论回复
地板
brotherwen|  楼主 | 2008-4-21 15:20 | 只看该作者

我的流程是先加载驱动

nErr=RegCreateKeyEx(HKEY_LOCAL_MACHINE,szRegKey,0,L"",0,0,NULL,&hDrvKey,&dwDisp);
    if(nErr!=ERROR_SUCCESS)
    {
        MessageBox(_T("创建驱动注册表子键失败!"));
        return;
    }
    else
    {
        //往注册表里添加内容
        WRITE_REG_SZ(L"Prefix",szPrefix);
        WRITE_REG_SZ(L"Dll",szDLL);
        WRITE_REG_SZ(L"FriendlyName",szFriendlyName);
        WRITE_REG_DWORD(L"Order",DrvOrder);
        WRITE_REG_DWORD(L"Index",DrvIndex);
    }
    HandleDriver=ActivateDeviceEx(szRegKey,NULL,0,NULL); //加载SimpleDriver驱动
    if(HandleDriver==INVALID_HANDLE_VALUE)
    {
        MessageBox(_T("加载SimpleDriver失败!"));
    }
    else
    {
        MessageBox(_T("加载SimpleDriver成功!"));
    }    
并且成功了

hFile=CreateFile(_T("SPL1:"),GENERIC_READ|GENERIC_WRITE,0,0, OPEN_EXISTING,0,0);
    //sprintf(buf,"hFile=0x%x",hFile);
    CString strTmp;
    strTmp.Format(_T("%x"),hFile); 
    CEdit *pDispEdit=(CEdit*)GetDlgItem(IDC_READ_DISP);
    pDispEdit->SetWindowText(strTmp);
    if(hFile==INVALID_HANDLE_VALUE)
    {
        MessageBox(_T("不能打开"));
        
    }
    else
    {
                  MessageBox(_T("打开成功!"));
     }
打开驱动时,却总是失败

使用特权

评论回复
5
brotherwen|  楼主 | 2008-4-21 15:57 | 只看该作者

我生成了一个.DLL文件

hFile=createfile()之前要做哪些具体的事情呢,我怀疑之前的事情没做好

使用特权

评论回复
6
high| | 2008-4-23 02:06 | 只看该作者

L"COM1:"

L?  wince是unicode的,所以L,和_T,  TEXT()一个目的---声明是unicode.

注册表Index=?这里你应该使得Index=1吧?并且确认
"2.是否已经正确加载了驱动? 可以查看注册表HKLMdeviceactive或者看device.exe进程里面是否加载了驱动的dll."

使用特权

评论回复
7
brotherwen|  楼主 | 2008-4-23 11:20 | 只看该作者

device.exe无法访问

HandleDriver=ActivateDeviceEx(szRegKey,NULL,0,NULL); //加载驱动
HandleDriver=0 也就是返回值为0


nErr=RegCreateKeyEx(HKEY_LOCAL_MACHINE,szRegKey,0,L"",0,0,NULL,&hDrvKey,&dwDisp);
    if(nErr!=ERROR_SUCCESS)
    {
        MessageBox(_T("创建驱动注册表子键失败!"));
        return;
    }
    else
    {
        //往注册表里添加内容
        WRITE_REG_SZ(L"Prefix",szPrefix);
        WRITE_REG_SZ(L"Dll",szDLL);
        WRITE_REG_SZ(L"FriendlyName",szFriendlyName);
        WRITE_REG_DWORD(L"Order",DrvOrder);
        WRITE_REG_DWORD(L"Index",DrvIndex);
    } 
之后,注册表的相应位置写上了:
Index  1
Order  0
Dll    simpledriver.dll
prefix SIM

使用特权

评论回复
8
aweyfan| | 2008-4-23 11:29 | 只看该作者

既然失败为什么不 GetLastError?

使用特权

评论回复
9
brotherwen|  楼主 | 2008-4-23 14:43 | 只看该作者

不知道如何用啊

使用特权

评论回复
10
high| | 2008-4-23 15:46 | 只看该作者

prefix SIM

hFile=CreateFile(_T("SPL1:"),GENERIC_READ|GENERIC_WRITE,0,0, OPEN_EXISTING,0,0);

-----有点晕

SPL1:  -- >  SIM1:

使用特权

评论回复
11
brotherwen|  楼主 | 2008-4-23 22:08 | 只看该作者

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

搞定了
index=0
就行了
createfile也是相应的前缀0就可以了
7楼的是打字打错了,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

217

帖子

0

粉丝