我的一个VC/MFC程序需要几个小.dat文件,存储的是一些波型数据. 我现在想将这几个文件编译到EXE中,使得只要一个EXE文件就可以执行而不需要提供.dat文件,怎么做到?
将这几个文件作为资源添加到工程为何不行啊,读出来的数据不对啊

解决方案 »

  1.   


    类似代码:HRSRC hRes = FindResource(NULL,MAKEINTRESOURCE(IDR_DLL1),_T("dll"));
     DWORD dwSize = SizeofResource(NULL , hRes);  //获得指定资源的大小
     HGLOBAL MemoryHandle = LoadResource(NULL, hRes);//将资源载入内存
     char sysdir[100],DllFile[120];
     GetSystemDirectory(sysdir,sizeof(sysdir));
     strcpy(DllFile,sysdir);
     strcat(DllFile,"\\MyDll.dll");
     if(MemoryHandle!= NULL)
    {
        BYTE *MemPtr = (BYTE *)LockResource(MemoryHandle); //定位资源位置
        CFile file(DllFile,CFile::modeCreate | CFile::modeWrite);
        file.Write(MemoryHandle,dwSize);
    file.Close();
        //创建一个临时文件,写入资源数据
     }
      

  2.   

    直接放在exe文件的最后
    然后读取自己行不行
    猜的
    因为看到那些.exe的flssh实际上就是将播放器和flash文件连在一起
      

  3.   

    在导入资源时由于dat格式文件并非VC的标准资源,所以在导入时需要在“Resource type”栏指定资源类型“DAT”,特别需要注意的是在此必须要包含引号。加入到资源后可以通过资源视图看到导入的DAT资源是以二进制形式保存的,一但加入就不能再通过资源视图对其进行编辑了。
       在使用DAT资源前首先要将其动态从应用程序中释放到文件中才可对资源做进一步的使用。可先通过宏MAKEINTRESOURCE()将资源标识号IDR_DAT转换成字符串Name,再分别通过FindResource()、LoadResource()函数查找、装载该资源到内存:CString Type="dat";HRSRC res=FindResource (NULL,Name,Type);HGLOBAL gl=LoadResource (NULL,res);
      

  4.   

    在资源中导入你的数据,选择自定义,然后自己起一个类型的名称,如"MyType",
    然后给你的导进来的这个资源也起一个名字,如"MyDat", 注意都要加上双引号,默认是不加的
    在导入的时候
    HRSRC hRes = ::FindResource( NULL, "MyDat", "MyType" ); 
    HGLOBAL gl =::LoadResource( NULL, hRes ); 
    LPVOID lp = ::LockResource( gl ); lp就可以用了如果不加双引号,MyDat就变成了变量,会报错"未定义"
      

  5.   

    感谢各位,还是一样的.
    哪位知道DAT文件的文件格式啊,是不是我没从数据起始的地方读啊
      

  6.   

    其实用PEBundle就好,挺好用的,省的写代码了