我将.DLL作为资源加到了工程中。ID:IDR_DATANEW1 TYPE:datanew。现在要释放资源,程序如下:
HANDLE f;
f=CreateFile( "D:\\maths.dll", 
      GENERIC_READ | GENERIC_WRITE,
      FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
      FILE_ATTRIBUTE_NORMAL, NULL);
LPVOID IoBuffer = (LPVOID)::LoadResource(NULL,
FindResource(NULL,MAKEINTRESOURCE(IDR_DATANEW1/*你Resource 的ID*/),(LPCTSTR)"Data"));
DWORD dwResource = SizeofResource(NULL,
FindResource(NULL,MAKEINTRESOURCE(IDR_DATANEW1/*你Resource 的ID*/),(LPCTSTR)"Datanew"));
DWORD BytesRead;
WriteFile(f,IoBuffer,dwResource,&BytesRead,NULL);
程序运行到
LPVOID IoBuffer = (LPVOID)::LoadResource(NULL,
FindResource(NULL,MAKEINTRESOURCE(IDR_DATANEW1/*你Resource 的ID*/),(LPCTSTR)"Data"));
的时候IoBuffer的值为0。最后写成的文件也就是0kb。请问这是怎么回事?ID AND TYPE都没有问题,大小写也一样

解决方案 »

  1.   

    能不能发给我看看
    [email protected]
      

  2.   

    在出错的那句后加:DWORD dwErr;dwErr = GetLastError();看错误代码是什么。
      

  3.   

    IoBuffer的值为0,资源加载失败.
      

  4.   

    RT_ACCELERATOR
    RT_ANICURSOR
    RT_ANIICON
    RT_BITMAP
    RT_CURSOR
    RT_DIALOG
    RT_FONT
    RT_FONTDIR
    RT_GROUP_CURSOR
    RT_GROUP_ICON
    RT_HTML
    RT_ICON
    RT_MENU
    RT_MESSAGETABLE
    RT_RCDATA
    RT_STRING
    RT_VERSIONFindResource的第三个参数从上面挑一个?
      

  5.   

    我这里的资源只有:
    Accelerator
    Data(自己建立的)
    Dialog
    Icon
    Menu
    String Table
      

  6.   

    我将第三个参数改成RT_RCDATA也还是不可以。
      

  7.   

    程序执行完:
    LPVOID IoBuffer = (LPVOID)::LoadResource(NULL,
    FindResource(NULL,MAKEINTRESOURCE(IDR_DATANEW1/*你Resource 的ID*/),(LPCTSTR)"Data"));
    后IoBuffer的地址是:0x000000000
    执行完
    DWORD dwResource = SizeofResource(NULL,
    FindResource(NULL,MAKEINTRESOURCE(IDR_DATANEW1/*你Resource 的ID*/),(LPCTSTR)"Datanew"));
    dwResource得值是0
      

  8.   

    能不能发给我看看
    [email protected]
      

  9.   

    那个是写出来的文件。我在这里没有起和原先的dll一样的名字。给起了个maths.dll
      

  10.   

    HRSRC handle;
    HINSTANCE hi;

    //hi = ::LoadLibrary("dir\\test.dll"); //如果你想从别的module加载资源 handle = ::FindResource(AfxGetApp()->m_hInstance/*你的程序的HINSTANCE*/,
                                    MAKEINTRESOURCE(IDR_MAINFRAME),
                                    (LPCTSTR)RT_GROUP_ICON);
      

  11.   

    首先你的资源并不是dll中的是你的应用程序中,但是好象和dll有关系-->会映射过去(不是很清楚)
    LPVOID IoBuffer = (LPVOID)::LoadResource(NULL,
    FindResource(NULL,MAKEINTRESOURCE(IDR_DATANEW1/*你Resource 的ID*/),RT_RCDATA));
    //改成RT_RCDATA可以得到IoBuffer
      

  12.   

    非常感谢fanqing(火影忍者+26%) 我的问题解决了