使用VC 6.0的Depends工具打開DLL可以讓你知道該DLL依賴于哪些DLL。但是很多時(shí)候加載DLL失敗的原因是間接的,比如說a.dll依賴于b.dll、c.dll、d.dll,你的當(dāng)前目錄下都有b.dll、c.dll、d.dll,但是加載a.dll就是失敗,這是為什么呢?原因是加載b.dll、c.dll、d.dll中的一個(gè)或多個(gè)失敗了,于是你有得用Depends工具打開b.dll、c.dll、d.dll,看看它們依賴于哪些DLL??荚嚧筇崾?這樣做你會(huì)感覺很累,效率也不高。有沒有簡(jiǎn)單的方法呢?我想到的一個(gè)是使用控制臺(tái)程序進(jìn)行測(cè)試。就是在當(dāng)前工作目錄下建一個(gè)控制臺(tái)工程,示例代碼如下:
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hinstLib;
hinstLib = LoadLibrary("D:\\otPlatform\\Release\\rsca\\otBestExtract.dll");
if (hinstLib == NULL)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
}
return 0;
}
運(yùn)行該程序,程序就會(huì)告訴你缺失了哪個(gè)依賴DLL了。
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hinstLib;
hinstLib = LoadLibrary("D:\\otPlatform\\Release\\rsca\\otBestExtract.dll");
if (hinstLib == NULL)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
}
return 0;
}
運(yùn)行該程序,程序就會(huì)告訴你缺失了哪個(gè)依賴DLL了。