API编的exe程序加载资源,怎么能在别人的机器上运行?
比如我用loadimage加载一个bmp,在本机上没问题,到别人的机子上,还要将bmp文件拷贝到exe文件夹里吗?越详细越好。谢谢啦。

解决方案 »

  1.   

    如果要Load外部的bmp文件,在运行环境中必须在指定的路径下存在这个文件,如果不指定路径直接用文件名,则文件必须存在于当前目录下。如果想做成只有一个exe文件就能正常运行,则需要把bmp文件作为资源添加到项目里面,使用资源ID来Load。
      

  2.   

    bmp文件当然得在目标机器上存在了,最好与EXE在同一文件夹下,然后可以先通过GetModuleFileName取得当前运行EXE的路径,然后再加载bmp文件。
    TCHAR szPath[MAX_PATH] = { 0 };
    GetModuleFileName(NULL, szPath, MAX_PATH);
    TCHAR *p = _tcsrchr(szPath, _T('\\'));
    if (p && ++p) *p = _T('\0')
    {
        _tcscat(szPath, _T("test.bmp"));
        // LoadImage(NULL, szPath, ....)
    }
    但建议把bmp文件放在EXE的资源里,直接从资源里加载比较方便。
      

  3.   

    还是建议你把图片放到资源里面,直接用资源ID来加载图片,这样只拷exe文件即可。
      

  4.   


    确实如此,刚刚试了。但有个问题,资源在本目录下生成的exe才2M,而资源在别的目录下加载生成的exe多了20M,什么原因?
      

  5.   


    因为exe里面包括图片文件,并且是以不压缩的BMP格式放进去的。
      

  6.   


    我是用的loadimage这个函数,本目录就是bmp在工程里面,就是loadimage第二个参数参数用"*.bmp",不在本目录就是参数用"C:\\***\\*.bmp",所以不知为什么?
      

  7.   

    我是用的loadimage这个函数,本目录就是bmp在工程里面,就是loadimage第二个参数参数用"*.bmp",不在本目录就是参数用"C:\\***\\*.bmp",所以不知为什么?
    ===============
    我实在看不明白楼主说的是什么,你到底将这个图片是当作资源加入了工程,还是以外部文件的形式来用的啊,LoadImage这个API两种方式都可以啊
      

  8.   


    对不起,我没表达清楚。我用的参数"C:\\***\\*.bmp",不知是不是以外部文件的形式来用?exe文件多了20M。
      

  9.   

    "C:\\***\\*.bmp“
    =============
    有这样用参数的吗?看起来像是文件名,不过又加了通配符,这样用行不行啊,你成功了没有
      

  10.   

    可以把资源附加到你得到exe里面去嘛, 在运行的时候释放出来
    仍然使用loadimage 路径就是当前目录了.
      

  11.   

    你的bmp文件是不是20MB左右?如果你把bmp文件作为资源添加到项目里面,其数据会生成到exe文件里面,exe文件就会增大。
      

  12.   


    bmp 只1M。  用资源加载生成exe是2M,用"C:\\***\\*.bmp“ 这种方式是20M。不知是不是我反复实验加载的缘故,aps也变成了20兆。明天再试试。
      

  13.   

    用"C:\\***\\*.bmp"这种方式不会导致exe文件增大,你检查一下项目中添加了哪些资源。
      

  14.   

    两种方法:
    1.安装你的软件时同时也把bmp文件安装到相应目录
    2.把bmp文件以资源的方式加载到exe文件中来,exe运行时先把bmp文件从资源中释放出来,然后loadimage就行了,至于如何加载到exe文件中,如何释放出来,你可以参考http://topic.csdn.net/u/20080717/08/47eb158b-e5f6-4862-b260-8378f87c1719.html