dll之loadbitmap失败 getlasterror返回1813 1814的解决

来源:互联网 发布:阿里云api怎么使用教程 编辑:程序博客网 时间:2024/05/20 18:51
       最近用DLL做单纯的资源供给部件遇到了LoadBitmap失败的问题(返回1813,1814),经过不懈的努力总算搞清楚是怎么回事了。

  问题的生产:
  我把一个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个小时才发现原来是这么回事,惨啊,呵呵

0 0
原创粉丝点击