问题1:
我写了个dll,里面有HBITMAP GetHandle(UNIT id)方法获得位图的句柄(插入一个位图,id为103)。在另一个工程用这个dll,调用GetHandle(103),返回的句柄为NULL,这是为什么?问题2:
如何把位图的二进制插入到dll中?

解决方案 »

  1.   

    这个位图的IP并没包括在DLL中,因此,加载失败。可以传位图的句柄或位图数据,不传ID
      

  2.   

    这个位图的IP并没包括在DLL中,因此,加载失败。可以传位图的句柄或位图数据,不传ID
      

  3.   


    我创建的是MFC DLL,位图资源在DLL中,所以在程序这端只能传ID来获取句柄。你说的位图的IP是什么啊?位图插入的本地文件
      

  4.   

    输错了,是ID,也就是DLL里的ID并不被调用程序识别
      

  5.   

    对啊,怎么能被识别呢?
    我知道一种方法,把位图二进制存在dll文件中,通过ID调用dll可以获得句柄
    但是这个方法dll就太大了,我想通过路径来获取图片,有这种方法吗?
      

  6.   

    GetHandle只会调用本程序的图片资源
      

  7.   

    这个方法是我自己写的,在dll中
      

  8.   


    LoadLibrary(_T("Direct3d_lib"));
    HINSTANCE hInst = GetModuleHandle(_T("Direct3d_lib"));
    HRSRC hRsrc=::FindResource(hInst,MAKEINTRESOURCE(uIDB),_T("PNG"));
    if(hRsrc!=NULL)
    {
    HGLOBAL hImgData=::LoadResource(hInst,hRsrc);
    if(hImgData==NULL)
    {
    ::FreeResource(hImgData);
    }
    else
    {
    LPVOID lpVoid = ::LockResource(hImgData);
    DWORD dwSize = ::SizeofResource(hInst, hRsrc);                       ......
    ::FreeResource(hImgData);    
    }
    }
    这是调用其他DLL等资源图片的一个例子,只能读出数据流
      

  9.   

    最主要是我有个程序是直接通过ID获取dll中的位图资源的句柄,但是我不知道他的dll是怎么写的,我写完就出现获取不到句柄的问题了
      

  10.   

    这个方法是我自己写的,在dll中
    最主要是我有个程序是直接通过ID获取dll中的位图资源的句柄,但是我不知道他的dll是怎么写的,我写完就出现获取不到句柄的问题了
      

  11.   

    这个方法是我自己写的,在dll中
    最主要是我有个程序是直接通过ID获取dll中的位图资源的句柄,但是我不知道他的dll是怎么写的,我写完就出现获取不到句柄的问题了不需要知道DLL是怎么写的,你只需要知道DLL的名字和位图资源的类型,ID就可以了
      

  12.   

    这个方法是我自己写的,在dll中
    最主要是我有个程序是直接通过ID获取dll中的位图资源的句柄,但是我不知道他的dll是怎么写的,我写完就出现获取不到句柄的问题了不需要知道DLL是怎么写的,你只需要知道DLL的名字和位图资源的类型,ID就可以了
    我明白你说的意思,那个dll也是别人写的,版本太老了准备废弃了,现在要自己写一个
      

  13.   

    用AfxGetResourceHnadle 得到正在使用的资源句柄,并保存。
    AfxSetResourceHnadle 设置资源句柄为DLL中资源的句柄,
    获取并使用位图

    用完设置回来---恢复为保存的句柄 。