問題的生產:
我把一個dLL(zy.dll)裝進了一張位圖(IDB_BITMAP1)和一個圖標(IDI_ICON1),然後通過程序DllzyTest來調用。調試運行不
成功,返回1813和1814。
下面是1813和1814的意義:
1813:找不到映像文件中指定的資源類型
1814:找不到映像文件中指定的資源名
在網上找了好多文章這兩個錯誤的解決都寫得不清楚,後來仔細排查發現了生產錯誤的原因了,是因爲資源DLL建立時位圖資源和圖標
的定義和資源調用程序裏的位圖資源和圖標資源的定義不一樣造成的。
看下圖,我zy.dll的IDB_BITMAP1和IDI_ICON1的定義是(打開zy.dll的Resource.h查看):
看下圖,而我的DllzyTest對IDB_BITMAP1和IDI_ICON1的定義是(打開DllzyTest的Resource.h查看):
同樣的IDB_BITMAP1,一個定義成了4002,另一個定義了6002,這樣在程序調用DLL資源就生產了1814:找不到映像文件中
指定的資源名。
而當IDI_ICON1的調用定義值被定義成了資源Dll裏IDB_BITMAP1的值就會生產1813:找不到映像文件中指定的資源類型
問題的解決方法:
把資源Dll裏的資源定義的名稱和值與調用程序裏的資源定義統一成一樣的就可以了
這一問題找了近20個小時才發現原來是這麼回事,慘啊,呵呵