在系統部署運行時我們經常發現某個程序在開發機器中可以運行,但是部署在某臺PC上缺不能運行,也存在在某些機器上可運行換一臺機器卻不能運行。主要表現出兩種現象:
?????? (1)、運行、調試時出現程序啟動時報錯,提示出現錯誤無法啟動。
?? ? ? (2)、程序執行數據庫查詢語句時直接跳過,查詢函數調用時斷點也無法中斷。并且無執行結果。
其實出現這樣的原因最主要是我們部署的程序缺少一些必要的運行庫(注意庫的版本,同樣的庫如果版本不一致也可能出現題)。
1.Depends
Depends用來顯示與一個可執行文件(exe或者dll)相關的依賴項(dll),以及該exe或dll引用了這些dll中的哪些接口。同時也可以看到每個被依賴的dll中的所有導出的函數接口。
該工具得到的是查看程序中隱式連接的Dll庫,也就是用LIB關聯的Dll模塊,無法顯示由顯示連接的Dll模塊,也就是用LoadLibrary函數導入的Dll函數。
2.DUMPBIN
1 // open_www.cpp : 定義控制臺應用程序的入口點。2 #include <stdio.h>3 #include <stdlib.h>4 extern "C"_declspec (dllexport)int add(int a,int b)5 {6 return a+b;7 }8 int main(void)9 { 10 int c=0; 11 c=add(1,4); 12 printf("c=%d\n",c); 13 return 0; 14 }
2.1 開啟CMD
2.2 移動目錄到C:\Program Files (x86)\Microsoft Visual Studio\VC98\Bin
(DUMPBIN.EXE所在目錄)
2.3 運行命令:VCVARS32.BAT
如果不運行vcvars32.bat會出現以下提示
2.4 下面就可以調用dumpbin.exe命令了
如果導出函數前不加extern "C"
/*extern "C"*/_declspec (dllexport)int add(int a,int b)
則顯示結果為: