LoadLibrary(Ex)失敗,GetLastError返回127 (找不到指定的程式)

來源:互聯網
上載者:User
    偵錯工具時遇到一個很怪對問題:一個很簡單的win32 dll,就一個DllMain,裡面就幾行代碼在Process Attach時調用API函數擷取註冊表的指定索引值 ,很簡單。但偏偏出了問題。問題還很怪異:另外一個程式LoadLibrary載入這個dll時返回NULL,GetLastError返回127(“ 找不到指定的程式”)。呵呵,這個錯誤就是怪異之處,非常難理解(其實我到現在也沒有理解什麼叫“指定到程式”)。去掉DllMain裡面到那幾行代碼,只留下空函數,再編譯就OK,加上那幾行API就無法LoadLibrary。
 
    按理說,就算API調用失敗,也不應該影響dll本身的載入吧??dll載入失敗一般發生再DllMain返回FALSE,或dll本身結構出現錯誤。這兩點在我的這個程式裡面應該都不存在:我的DllMain明明返回了TRUE(其實dll根本就沒有載入,DllMain也沒有執行),這個dll是VS2005剛剛編譯出來的,其結構不大可能被破壞。

    後來使用來排除法確定是調用了RegGetValue到緣故。

    仔細查看MSDN,這個函數“Requires Windows Vista or Windows XP Professional x64 Edition”而我用的是32位版本的Windows XP Pro,是個問題。不過很難理解。就算我調用了一個不被支援的API函數,頂多在這個函數被執行是給我throw一下(或返回FALSE之類的),可我遇到的情況是在這個函數被執行之前就出了問題,好像由於使用了這個函數,導致編譯器在編譯dll時做了什麼事情似的!!實在無法理解了。還有LoadLibrary失敗後的LastError資訊更是誤導!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.