我想把dll文件的图标提取出来放到对话框里的一个picture控件里面,dll部分用win32 dll创建的。引入一个图标资源 IDI_ICON2
然后在对话框里面的一个按钮事件里面读取dll里面的图标,但是提示有个小错误,希望各位指点:
void CTestBmlDllDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
HINSTANCE hinstDll;
hinstDll=LoadLibrary("BmpDll.dll");
ASSERT (hinstDll);
if(hinstDll==NULL)
{
MessageBox("fail");
}
    else
AfxSetResourceHandle(hinstDll);
 CStatic *picon=(CStatic*)GetDlgItem(IDC_STATIC);
 picon->SetIcon(::LoadIcon(hinstDll,IDI_ICON2));
}编译出错提示是:
error C2065: 'IDI_ICON2' : undeclared identifier
可是IDI_ICON2确实是dll资源文件里的图标阿,不知道为什么会有这样的错误,请各位指点。谢谢。

解决方案 »

  1.   

    你指向的资源并不是一个图标的资源啊!而是一个dll的!这样使用对吗?我没试过!
      

  2.   

    IDI_ICON2 也需要DEFINE 在resource.h文件中,而且要和dll之值相同
      

  3.   

    ::LoadIcon(hinstDll,IDI_ICON2)
    第二个参数为LPCSTR在dll 的resource.h中的IDI_ICON2如为整型,需要转换为LPCSTR
       MAKEINTRESOURCE(IDI_ICON2))
    同时在调用程序的resource.h要define IDI_ICON2 同dll中要一样。
      

  4.   

    你的这个程序是调用另外的一个Dll文件中图标,在那个dll文件中定义了IDI_ICON2这个图标,但是这个IDI_ICON2在这个dll中定义的时候是使用宏定义的方式实现的,也就是说,这个IDI_ICON2对应的是一个整数的数值。而这个IDI_ICON2在你的这个程序中并没有定义,所以会提示没有定义错误。如果你想正确调用那个图标的话,你最好看看这个DLL文件中的Resource.h文件中IDI_ICON2的值是什么,然后::LoadIcon(hinstDll,IDI_ICON2)中的IDI_ICON2改成那个值就可以了!
      

  5.   

    void AddExeIconToList(LPCTSTR lpszExeName)
    {
    assert(lpszExeName != NULL); // Get count
    HINSTANCE hInst = AfxGetInstanceHandle();
    UINT uCount = (int)::ExtractIcon(hInst, lpszExeName, -1); // Extract icon
    if(uCount <= 0) return;

    for(UINT i = 0; i < uCount; i ++)
    {
    m_imgList.Add(::ExtractIcon(hInst, lpszExeName, i));
    m_wndList.InsertItem(m_wndList.GetItemCount(), NULL, i);
    }
    }