日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

导入win32_为什么DLL在导入项没有成功解析时会加载失败?

發(fā)布時間:2024/9/19 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 导入win32_为什么DLL在导入项没有成功解析时会加载失败? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

短答案

因為我們測試過其他方案,只有這種方式是最好的。

長答案

在16位的Windows系統(tǒng)上,如果一個模塊沒有滿足其所有的導入表,則它仍然可以被系統(tǒng)加載。只要你不調(diào)用一個丟失的導入項,則一切都還是正常的。如果你嘗試調(diào)用一個丟失的導入項,程序?qū)⒓幢罎⒉@示”不可恢復的錯誤”的對話框提示。

到了Win32時代,開發(fā)團隊覺得這是一個很糟糕的設(shè)計,因為有時候人們會將一個為Windows 3.1開發(fā)的應(yīng)用程序拷貝到Windows 3.0上并運行,一開始,這個應(yīng)用程序運行的還不錯,但是如果這個應(yīng)用調(diào)用了一個只在Windows 3.1平臺上可用的函數(shù)時(例如,GetSaveFileName這個函數(shù)),應(yīng)用程序會立即崩潰。

因此Win32開發(fā)團隊決定,如果有任何一個導入項沒有被成功解析,則應(yīng)用程序一開始加載的時候就會失敗。如果上面例子中的應(yīng)用程序開發(fā)商希望能將他們的應(yīng)用運行在Windows 3.0上,則可以通過顯式地使用GetProcAddress來表明這一點。因為如果必須顯式調(diào)用GetProcAddress,則可能需要檢查返回值。

當人們大聲疾呼時,有時會出現(xiàn)此問題:”天哪,我應(yīng)該有一種方法可以將導入項標記為’可選’-如果無法綁定,則加載應(yīng)該不會失敗。在調(diào)用綁定之前,應(yīng)用程序有責任驗證綁定是否成功。”,這些人可能是無意中在要求歷史的重演,因為這又會回到我們一開始碰到問題的地方。

總結(jié)

如果對一個函數(shù)調(diào)用在當前平臺上是否可用存在疑慮,可以嘗試先用GetProcAddress來獲取函數(shù)地址,如果函數(shù)不可用則進行相應(yīng)的提示或者錯誤處理,盡量地讓你的應(yīng)用優(yōu)雅的退出。

總結(jié)

以上是生活随笔為你收集整理的导入win32_为什么DLL在导入项没有成功解析时会加载失败?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。