我在dll 建立了一个dialog的派生类mydlg,里面有个dialog的资源。然后在其他应用程序里调用这个dll里的mydlg.DoModal()行吗??我试了好像有问题.还有,我在dll里建立了一写资源,如bitmap,然后再其他应用程序里调用这个dll的资源也不行,应该怎么弄? CBitmap cbmp;
BITMAP bmp;
cbmp.LoadBitmap(BITMAP_IN_DLL);
cbmp.GetBitmap(&bmp);//这里就报错了,我loadbitmap其他资源没问题.是我什么地方错了还是不能在dll里包含资源??
先回去了,每天上午来看。

解决方案 »

  1.   

      AFX_MANAGE_STATE(AfxGetStaticModuleState());最好把显示DLG和取得BMP(当然用HANDLE)都用函数导出。
      

  2.   

    我其实是静态编译guilib toolkit,动态调用的时候一切正常,但静态链接后,能成功生成exe,但运行错误,原因是调用资源的时候出错了,也就是资源用不上,怎么回事。
      

  3.   

    假设101是Res.dll中图标的标识符CPaintDC dc(this);

    HMODULE hModoule=LoadLibrary(_T("D:\\Documents\\Visual Studio 2005\\Projects\\ToolBarEx\\debug\\Res.dll"));
    // Find the resource handle.

    BITMAP bmp;
                
           
    CBitmap cbmp;
    HBITMAP hBmp=LoadBitmap(hModoule,MAKEINTRESOURCE(101));
    CDC dcMem;
    dcMem.CreateCompatibleDC(&dc);
    cbmp.Attach(hBmp);
    cbmp.GetBitmap(&bmp);
    //dcMem.CreateCompatibleDC(&dc);
    CBitmap* pOldBmp=dcMem.SelectObject(&cbmp);
    dc.BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&dcMem,0,0,SRCCOPY);
    dcMem.SelectObject(pOldBmp);
    dcMem.DeleteDC();
                

    FreeLibrary(hModoule);
      

  4.   

    6楼的回答我明白,就是纯资源dll。类导出就是指声明:class GUILIBDLLEXPORT myclass 这样吗?GuiToolKit里面所有的类都是这样声明的。
    其实我的问题就是GuiToolKit静态编译的时候资源用不上的问题,动态dll的时候可以用,大家有遇到类似的问题吗
      

  5.   

    在你要用到dll资源的代码前调用这句话就行了。
      

  6.   

    guilib 静态编译问题解决了,希望跟我遇到同样问题的朋友少走弯路。
    首先解决编译问题:
    见 http://topic.csdn.net/t/20050906/17/4253280.html只有有了exe,如果运行报错,应该是资源问题,仔细看guilib里面只有3张bitmap,把这3个bitmap添加到自己的工程里面,记得图片的id要跟guilib里的一致,放到resource.h里面,再重新编译,成功!#define IDB_GUI_MDIICONS                18040
    #define IDB_GUI_DOCKBAR                 18041
    #define IDB_GUI_DOCKBAROFFICE           18042也就是拷到resource.h