有的時候在程序運行時候,會找不到XXDLL的YY函數入口點
第一種可能:函數在寫入口點的時候,名字不對,大小寫寫錯或者什么的。
第二種:DLL查找順序不對
實際上文件句柄查找順序:
讓我們順路看看程序加載一個DLL的查找順序吧。我用程序去引用一個根本不存在的dll,然后用filemon去看文件句柄的查找順序:
D:\PersonWork\ForTest\ConsoleApplication1\bin\Debug\ironsoftEncryp.dll
D:\PersonWork\ForTest\ConsoleApplication1\bin\Debug\ironsoftEncryp.dll
D:\PersonWork\ForTest\ConsoleApplication1\bin\Debug\ironsoftEncryp.dll
C:\Windows\System32\ironsoftEncryp.dll
C:\Windows\system\ironsoftEncryp.dll
C:\Windows\ironsoftEncryp.dll
D:\PersonWork\ForTest\ConsoleApplication1\bin\Debug\ironsoftEncryp.dll
C:\Program Files\Borland\Delphi7\Bin\ironsoftEncryp.dll
C:\Program Files\Borland\Delphi7\Projects\Bpl\ironsoftEncryp.dll
C:\Windows\System32\ironsoftEncryp.dll
C:\Windows\ironsoftEncryp.dll
C:\Windows\System32\wbem\ironsoftEncryp.dll
C:\Program Files\Microsoft SQL Server\80\Tools\Binn\ironsoftEncryp.dll
C:\Program Files\Microsoft SQL Server\80\Tools\Binn\ironsoftEncryp.dll
C:\Program Files\Microsoft SQL Server\90\Tools\Binn\ironsoftEncryp.dll
C:\Program Files\Microsoft SQL Server\90\DTS\Binn\ironsoftEncryp.dll
C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\ironsoftEncryp.dll
可以總結一下查找順序:
1. 可執行文件所在目錄;
2.進程當前目錄;
3.系統目錄,%SystemRoot%/system32
4.16位系統目錄;,%SystemRoot%/system
5.Windows目錄,%SystemRoot%/
6.環境變量PATH中的目錄;