hcheng_qi
驱动老牛
驱动老牛
  • 注册日期2002-11-07
  • 最后登录2006-04-13
  • 粉丝1
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:2431回复:7

打印机驱动

楼主#
更多 发布于:2002-11-13 16:47
win2k ddk中说,在同一次打印事务中,DrvStartDoc应该只会被调用一次,可是我去发现在我得driver中,该函数会被多次调用,但是DrvEndDoc却只调用了一次?还有,我在UI中设置了一个选项,然后希望通过devmode中的dmReserved1传递到Render中,可以我在render中去那不到该值,不知道如何修改或者其他的解决方法
| -''/"',___,,--''"`-,_¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡ `6_ 6¡¡)¡¡ `-,¡¡(¡¡¡¡),`-.__.`)¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡ /_Y_./',, _¡¡)¡¡`._¡¡`,``-..-'¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡_.'.`='¡¡ _ / / --'_.','¡¡¡¡¡¡¡¡¡¡¡¡ (il)'¡¡¡¡¡¡(li)''¡¡ ((!-'¡¡¡¡ÃÃÃÃ! ±ðÅÜ£¿!
villein
驱动牛犊
驱动牛犊
  • 注册日期2002-08-04
  • 最后登录2010-12-05
  • 粉丝2
  • 关注1
  • 积分63分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-14 09:30
DrvStartDoc调用的次数随应用程序不定,所以在这里面保存状态信息的话要小心校验,最好不要有状态转换之类的代码。

对于DDK没有说可以使用的保留位,如果在例子代码中也没见到被使用,就不要用,因为有可能会被清零
villein
驱动牛犊
驱动牛犊
  • 注册日期2002-08-04
  • 最后登录2010-12-05
  • 粉丝2
  • 关注1
  • 积分63分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-14 09:33
如果要从ui传递什么值到render,那就用注册表了
hcheng_qi
驱动老牛
驱动老牛
  • 注册日期2002-11-07
  • 最后登录2006-04-13
  • 粉丝1
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-14 12:58
我已经用reserved1实现了,不过你的方法不错
| -''/"',___,,--''"`-,_¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡ `6_ 6¡¡)¡¡ `-,¡¡(¡¡¡¡),`-.__.`)¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡ /_Y_./',, _¡¡)¡¡`._¡¡`,``-..-'¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡_.'.`='¡¡ _ / / --'_.','¡¡¡¡¡¡¡¡¡¡¡¡ (il)'¡¡¡¡¡¡(li)''¡¡ ((!-'¡¡¡¡ÃÃÃÃ! ±ðÅÜ£¿!
jr0jr
驱动牛犊
驱动牛犊
  • 注册日期2001-11-29
  • 最后登录2005-10-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-13 03:26
2000ddk下的 oemdll\\oemuni\\devmode.cpp中有一段出错了
应是
BOOL MakeOEMDevmodeValid(POEMDEV pOEMDevmode)
{
    if(NULL == pOEMDevmode)
    {
        return FALSE;
    }

    // ASSUMPTION: pOEMDevmode is large enough to contain OEMDEV structure.

    // Make sure that dmOEMExtra indicates the current OEMDEV structure.
    pOEMDevmode->dmOEMExtra.dwSize       = sizeof(OEMDEV);
    pOEMDevmode->dmOEMExtra.dwSignature  = OEM_SIGNATURE;
    pOEMDevmode->dmOEMExtra.dwVersion    = OEM_VERSION;

    // Set driver data.
///////就是指这一句
    if(pOEMDevmode->dwDriverData > 100)
    {
        pOEMDevmode->dwDriverData = 0;
    }

    return TRUE;
}
tango
驱动牛犊
驱动牛犊
  • 注册日期2001-05-07
  • 最后登录2015-03-19
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-19 11:00
startdoc是由ap决定调的,像world之类的东西会掉n多次,要自己加标志位验证 :)
y5318
驱动中牛
驱动中牛
  • 注册日期2001-09-18
  • 最后登录2018-05-29
  • 粉丝1
  • 关注0
  • 积分14分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-03-19 12:38
也许你的driver不是按照ddk标准开发的
tango
驱动牛犊
驱动牛犊
  • 注册日期2001-05-07
  • 最后登录2015-03-19
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-20 11:10
只要ap调startdoc,driver就会进drvstartdoc,不是你能控制的
游客

返回顶部