之前的一個專案中用到QAxObject 處理excel表格,在客戶的電腦上經常會遇到各種各樣的問題,不同的office excel版本, 或者安裝的wps, 是否激活等經常會出問題。 呼叫組件的介面excel是 setControl("Excel.Application") , wps是 setControl("Ket.Application")。一直懷疑在呼叫wps介面的時候,是否裝過office excel都對它有影響,但是電腦沒法頻繁重裝系統,這個問題就一直放著。這次電腦加了固態,裝了系統,然后自己只裝了wps,在跑專案的時候,這一塊一直提示
onecore\com\combase\dcomrem\resolver.cxx(2483)\combase.dll!76CB3864: (caller: 76C9E016) ReturnHr(9) tid(3fc4) 80040154 沒有注冊類
QAxBase::setControl: requested control Ket.Application could not be instantiated
然后就各種查, 發現wps安裝的時候是默認安裝到當前用戶的, 注冊表里只有 user表中有kingsoft,在machine表中沒有, 之前一直懷疑是wps安裝有問題,換了版本,用管理員權限運行安裝都沒有用,好像wps只能安裝到當前用戶 。安裝這條路走不通,就想著qt是如何訪問計算機中的 com組件的,檔案里好像沒有相關的說明。 求助大佬!
uj5u.com熱心網友回復:
安裝的時候應該有個選項是否所有用戶有效,一般軟體都有這個uj5u.com熱心網友回復:
嗯,看了很久,wps貌似沒有,找了很久都沒找到uj5u.com熱心網友回復:
目前進度: 不知道是安裝的有問題還是怎么,在注冊表HKEY_CLASSES_ROOT\中KET.Application節點存在,CLSID也存在,但是在HKEY_CLASSES_ROOT\CLSID\中查不到對應的CLSID節點,呼叫 CLSIDFromProgID 回傳 CO_E_CLASSSTRING(Invalid class string),查MSDN CLSIDFromProgID介面定義也沒看出來這個介面是查的哪個表,如果說是HKEY_CLASSES_ROOT\KET.Application\CLSID 這個邏輯,應該是可以回傳的,但是實際沒有; 同時呼叫ProgIDFromCLSID 查上面KET.Application對應的CLSID, 發現回傳 REGDB_E_CLASSNOTREG(Class not registered),這個到底是怎么查的,蒙圈
uj5u.com熱心網友回復:
參考 https://www.cnblogs.com/starpnd/p/3641144.html修改注冊表方法:
手動在machine表中CLSID和typeLib中添加了wps的注冊項,重啟之后沒有生效,不知道是不是里面很多東西相關的,只添加這一個不行;然后又參考上面的方法,進行匯入,發現CLSIDFromProgID沒有生效。但是通過ProgIDFromCLSID 可以初始化成功了(前面手動添加可能容易出問題,建議直接匯出再匯入,匯入直接雙擊匯出修改好的注冊表檔案就好了),后面又加上了 \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\KET.Application 這個節點, 呼叫 CLSIDFromProgID可以成功。
到了這里本來以為大功告成了,萬萬沒想到,在直接使用程式測驗的時候,程式崩潰了。
報錯:"paramTypeNames.size() == paramNames.size()" in file .\qaxbase.cpp, line 3069
Debug Error!
然而用裝wps的超級管理員用戶登陸時,測驗程式是成功的。所以, 前面匯入注冊表的方法應該是沒有把介面也匯出來,所以介面無法訪問,導致崩潰。
。。。
安裝2010版本:
把WPS2019卸掉了,安裝了wps2010(http://xiazai.zol.com.cn/detail/45/440291.shtml#hotArticle),查看注冊表發現沒有kingsoft和ket.application, 最后找到了ET.Application, 看對應的路徑是剛安裝的wps2010, 然后用程式CLSIDFromProgID(OLESTR("ET.Application"), &clsid) 測驗,回傳成功了。但是因為現在基本不用這個版本,所以不能作為解決方案。
uj5u.com熱心網友回復:
這種事直接咨詢官方吧不知道這個開發檔案和demo能不能幫到你:
https://open.wps.cn/docs/office
https://code.aliyun.com/zouyingfeng/wps/tree/master/cpp
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/29352.html
標籤:工具平臺和程序庫
上一篇:菜鳥求助大神關于按鍵雙擊長按編譯
