閱讀177 返回首頁    go 人物


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共享