阅读177 返回首页    go Internet Explorer


IE8和IE9打印时遇到内存泄露

在用IE8和IE9打印时,调用到下面的函数:

    IOleCommandTarget::Exec()

该函数声明如下:

HRESULT STDMETHODCALLTYPE Exec(
    __RPC__in_opt const GUID *pguidCmdGroup,
    DWORD nCmdID,
    DWORD nCmdexecopt,
    __RPC__in_opt VARIANT *pvaIn,
    __RPC__inout_opt VARIANT *pvaOut)

第一个参数的取值,我只能找到两个:NULL(也就是standard group)和CGID_MSHTML;

第二个参数就是打印命令,对应第一个参数命令组,分别是OLECMDID_PRINT(或OLECMDID_PRINT2)和IDM_PRINT;

第三个参数,我设置为OLECMDEXECOPT_DONTPROMPTUSER;

第四个参数是我一个本地模板文件的路径;

第五个参数为NULL。

结果如下:

当第一个参数是NULL,第二个参数是OLECMDID_PRINT,每打印一次消耗大约2-3M内存,而当第二个参数是OLECMDID_PRINT2时,函数返回OLECMDERR_E_NOTSUPPORTED;

当第一个参数是CGID_MSHTML,每打印一次消耗大约20M内存。

所以,最重要的问题是:怎么样才能避免内存泄漏?

其次,第一个参数的取值还有哪些?目前这两个有什么区别?

OLECMDID_PRINT2命令似乎并不支持,不知在哪种情况下可用?它与OLECMDID_PRINT命令有什么区别?



最后更新:2017-05-14 23:44:13

  上一篇:go 链接打印机时出现输入用户名和密码。
  下一篇:go 惠普暗影精灵2怎么开WiFi共享