Chinaunix首页 | 论坛 | 博客
  • 博客访问: 107142
  • 博文数量: 26
  • 博客积分: 1060
  • 博客等级: 少尉
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-04 10:32
文章分类

全部博文(26)

文章存档

2013年(1)

2011年(21)

2010年(4)

分类: WINDOWS

2011-07-04 10:06:42

这两天调试打印机驱动, 碰到一个问题:
驱动加载之后,没有执行init直接就卸载了。

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
            RETAILMSG(1, (TEXT("PRT:DLL_PROCESS_ATTACHyy\t\n")));
// return TRUE; //ztl -- 2011-07-02

            break; // ztl ++ 2011-07-02


        case DLL_THREAD_ATTACH:
            RETAILMSG(1, (TEXT("PRT:DLL_THREAD_ATTACHyy\t\n")));
            break;
        case DLL_THREAD_DETACH:
            RETAILMSG(1, (TEXT("PRT:DLL_THREAD_DETACHyuyu\t\n")));
            break;
        case DLL_PROCESS_DETACH:
            RETAILMSG(1, (TEXT("PRT:DLL_PROCESS_DETACHyuyu\t\n")));
            break;
        default:
            RETAILMSG(1, (TEXT("PRT:defyuyu\t\n")));
            break;
    }
    return TRUE;
}


打印LOG:


Printer:DLL_PROCESS_ATTACHyy

Printer:DLL_PROCESS_DETACHyuyu


驱动加载之后,没有调用init函数。直接就退出来了。

分析
原因是:

WINCE的流式驱动函数模型为:
XXX_Init

前缀必须是三个字母。否则将不执行init函数。

附另外几个驱动加载失败的原因:
1. dll 没有刷新。
2. 注册表中的 Prefix 选项的 值 与 XXX不一致。
3. init 返回 0.
4. platform.bib 中没有将 dll 加载到 NK 中。


阅读(2152) | 评论(1) | 转发(0) |
0

上一篇:wince 驱动

下一篇:WinCE 编译错误集合

给主人留下些什么吧!~~

sunweili502012-08-20 17:21:04

前缀必须是三字母啊,问题终于解决了。
dll如何刷新