寫了一個qt程式(程式A),里面使用到了錄音功能,但不知道為什么,與錄音相關的DLL在程式運行時沒有加載(導致檢測不到錄音設備),導致程式不正常(檢測不到錄音設備),但整個程式在運行期間是沒有例外的,也沒有崩潰。qt程式使用windeployqt進行打包,相關的dll都在程式的運行目錄了。



但如果撰寫一個簡單的測驗程式(程式B),這個程式只是檢測和列印默認的錄音設備名字,在運行的程序中能夠加載程式目錄下audio下的dll(qtaudio_wasapi.dll和qtaudio_windows.dll),這時候程式是能夠正常運行的。

現在的問題是:為什么一個程式不能正常加載相應的dll,導致了程式的不正常運行,但又沒有崩潰;而另一個程式能夠正常運行,功能也正常?
在使用windeployqt部署完程式后,可以看到拷貝過來的dll中,Qt5Core.dll是被修改過的。

但如果將安裝目錄下的Qt5Core.dll直接復制過來,再運行程式A,這時候程式就能正常運行了,相應的dll也會加載,但一部分dll加載的是安裝目錄的dll,而不是當前程式所在目錄的dll。真奇怪。


但如果將這兩個程式拷貝到一個沒有安裝qt的電腦上(已經用windeployqt部署,相應的dll也齊全),程式能夠運行,但都無法正常檢測到錄音設備。(audio檔案夾下的兩個DLL沒有被加載:qtaudio_wasapi.dll和qtaudio_windows.dll)
uj5u.com熱心網友回復:
程式正常了,核心就是在main函式的開始加這句話:QCoreApplication::addLibraryPath("./");
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/59883.html
標籤:Qt
下一篇:AS3.6版本更新疑問
